{"id":54494,"date":"2019-12-27T00:00:00","date_gmt":"2019-12-26T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning"},"modified":"2020-02-18T14:02:30","modified_gmt":"2020-02-18T11:02:30","slug":"dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","title":{"rendered":"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/cca85b86c64843707a2167a7fed19867.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Je hebt opnieuw de taak objectdetectie. Prioriteit is de snelheid van de werking met acceptabele nauwkeurigheid. Neem de YOLOv3-architectuur en train deze verder. De nauwkeurigheid (mAp75) is meer dan 0,95. Maar de snelheid van de uitvoering is nog steeds laag. Verdorie. <\/p>\n<p><\/p>\n<p>Vandaag zullen we kwantisatie vermijden. En onder de kat kijken we naar <strong>Model Pruning<\/strong> \u2014 het verwijderen van overbodige delen van het netwerk om de inferentie te versnellen zonder de nauwkeurigheid te verliezen. Eerst heel duidelijk \u2014 waar, hoeveel en hoe je kunt uitsnijden. We zullen bespreken hoe je dit met de hand kunt doen en waar je het kunt automatiseren. Aan het einde \u2014 een repository op keras.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"vvedenie\">Inleiding<\/h3>\n<p><\/p>\n<p>Bij mijn vorige werk, bij het Permse Macroscop, heb ik een gewoonte ontwikkeld \u2014 altijd de uitvoeringstijd van algoritmen in de gaten te houden. En de netwerkuitvoering altijd te controleren via een adequaatheidsfilter. Meestal halen state-of-the-art modellen deze filter niet, wat me naar Pruning heeft geleid. <\/p>\n<p><\/p>\n<p>Pruning is een oud onderwerp, dat werd besproken in <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=eZdOkDtYMoo\">de Stanford lezingen<\/a><\/noindex> in 2017. Het belangrijkste idee is het verkleinen van de grootte van het getrainde netwerk zonder verlies van nauwkeurigheid door verschillende knopen te verwijderen. Het klinkt geweldig, maar ik hoor zelden over het gebruik ervan. Misschien zijn er niet genoeg implementaties, zijn er geen Nederlandstalige artikelen of denkt iedereen gewoon dat pruning een geheim is en zwijgt.<br \/>\nMaar laten we het analyseren<\/p>\n<p><\/p>\n<h3 id=\"vzglyad-v-biologiyu\">Een blik in de biologie<\/h3>\n<p><\/p>\n<p>Ik hou ervan als in Deep Learning idee\u00ebn uit de biologie worden ge\u00efntegreerd. Ze kunnen worden vertrouwd (wist je dat ReLU erg lijkt op <noindex><a rel=\"nofollow\" href=\"http:\/\/www.gatsby.ucl.ac.uk\/~lmate\/biblio\/dayanabbott.pdf\">de activatiefunctie van neuronen in de hersenen<\/a><\/noindex>?) <\/p>\n<p><\/p>\n<p>Het proces van Model Pruning is ook vergelijkbaar met biologie. De reactie van het netwerk kan hier worden vergeleken met de plasticiteit van de hersenen. Er zijn een paar interessante voorbeelden in het boek <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/norman-doydzh\/plastichnost-mozga\/?utm_medium=cpc&amp;utm_source=google&amp;utm_campaign=DSA%7C149839530&amp;utm_term=&amp;utm_content=k50id%7Caud-499675211712%3Adsa-179513627318%7Ccid%7C149839530%7Caid%7C248455294996%7Cgid%7C6837176850%7Cpos%7C1t1%7Csrc%7Cg_%7Cdvc%7Cc%7Creg%7C1011993%7Crin%7C%7C&amp;k50id=6837176850%7Caud-499675211712%3Adsa-179513627318&amp;gclid=Cj0KCQiA0ZHwBRCRARIsAK0Tr-oKPqkmL7_Oxg62JZO8Jlk9zO-9nYKIRFxHi_lgoCvsQQadvUGxUzkaApgpEALw_wcB\">van Norman Doidge<\/a><\/noindex>:<\/p>\n<p><\/p>\n<ol>\n<li>De hersenen van een vrouw die vanaf geboorte maar de helft had, herschreven zichzelf om de functies van de ontbrekende helft uit te voeren.<\/li>\n<li>Een jongen schoot een deel van zijn hersenen weg dat verantwoordelijk was voor het gezichtsvermogen. In de loop van de tijd namen andere delen van de hersenen deze functies over. (herhalen we niet)<\/li>\n<\/ol>\n<p><\/p>\n<p>Zo kun je ook zwakke convoluties uit je model snijden. In het uiterste geval kunnen de resterende convoluties de uitgesneden delen vervangen. <\/p>\n<p><\/p>\n<h3 id=\"lyubish-transfer-learning-ili-uchish-s-nulya\">Hou je van Transfer Learning of leer je vanaf nul?<\/h3>\n<p><\/p>\n<p><strong>Optie nummer \u00e9\u00e9n.<\/strong> Je gebruikt Transfer Learning met Yolov3, Retina, Mask-RCNN of U-Net. Maar vaak hoeven we geen 80 klassen objecten te herkennen, zoals in COCO. In mijn ervaring blijft het vaak beperkt tot 1-2 klassen. We zouden kunnen veronderstellen dat de architectuur voor 80 klassen hier overbodig is. Het ligt voor de hand om te denken dat we de architectuur moeten verkleinen. Bovendien willen we dit graag doen zonder dat de al bestaande voorgetrainde gewichten verloren gaan.<\/p>\n<p><\/p>\n<p><strong>Optie nummer twee.<\/strong> Misschien heb je veel data en rekenkracht, of heb je gewoon een uiterst aangepaste architectuur nodig. Dat maakt niet uit. Maar je traint het netwerk vanaf nul. De normale volgorde is: we bekijken de datastructuur, kiezen een OVERBODIGE architectuur qua vermogen en duwen dropout om overfitting te voorkomen. Ik heb dropout van 0.6 gezien, Karl. <\/p>\n<p><\/p>\n<p>In beide gevallen kan het netwerk verkleind worden. We zijn gemotiveerd. Laten we nu eens kijken wat pruning inhoudt.<\/p>\n<p><\/p>\n<h3 id=\"obschiy-algoritm\">Algemene algoritme<\/h3>\n<p><\/p>\n<p>We hebben besloten dat we convoluties kunnen verwijderen. Dit lijkt vrij eenvoudig:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/1c01fa318d08550c9738c88d52e36b2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Het verwijderen van een willekeurige convolutie is stressvol voor het netwerk, wat meestal leidt tot een zekere toename van de fout. Enerzijds is deze fouttoename een indicator van hoe goed we de convoluties verwijderen (bijvoorbeeld een grote toename geeft aan dat we iets niet goed doen). Maar een kleine toename is vaak acceptabel en kan vaak worden gecorrigeerd met een lichte hertraining met een kleine LR. Laten we een stap toevoegen voor de hertraining:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/d51df9606d65fd4e7e80209743f761c3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nu moeten we begrijpen wanneer we onze cyclus van Learning&lt;-&gt;Pruning willen stoppen. Hier kunnen exotische situaties zijn waarbij we het netwerk tot een bepaalde grootte en snelheid willen verkleinen (bijvoorbeeld voor mobiele apparaten). Echter, de meest voorkomende optie is om door te gaan met de cyclus totdat de fout boven de toegestane drempel komt. Laten we een voorwaarde toevoegen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/9032018847833b54402124a29d3acbb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dus, het algoritme wordt duidelijk. Het enige wat overblijft is te bespreken hoe we te verwijderen convoluties kunnen identificeren.<\/p>\n<p><\/p>\n<h3 id=\"poisk-udalyaemyh-svertok\">Zoeken naar te verwijderen convoluties<\/h3>\n<p><\/p>\n<p>We need to remove some convolutions. Charging through and 'shooting down' any is a bad idea, even though it might work. But since we have a brain, we can think and try to identify the 'weak' convolutions for removal. There are several options:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openreview.net\/pdf?id=rJqFGTslg\">De laagste L1-metriek of low_magnitude_pruning<\/a><\/noindex>. Het idee is dat convoluties met lage gewichten een geringe bijdrage leveren aan de uiteindelijke beslissing. <\/li>\n<li>De laagste L1-metriek met inachtneming van het gemiddelde en de standaardafwijking. We voegen een inschatting van de verdelingskarakteristiek toe.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.08571\">Maskeren van convoluties en uitsluiten van de minst invloedrijke op de uiteindelijke nauwkeurigheid<\/a><\/noindex>. Een nauwkeurigere bepaling van onbeduidende convoluties, maar zeer tijd- en resource-intensief. <\/li>\n<li>Andere <\/li>\n<\/ol>\n<p><\/p>\n<p>Elk van de opties heeft recht op bestaan en zijn eigen implementatiekenmerken. We zullen de optie met de laagste L1-maat bekijken<\/p>\n<p><\/p>\n<h3 id=\"ruchnoy-process-dlya-yolov3\">Handmatig proces voor YOLOv3<\/h3>\n<p><\/p>\n<p>In de oorspronkelijke architectuur zijn er residuele blokken. Maar hoe geweldig ze ook zijn voor diepe netwerken, ze zullen ons iets in de weg staan. Het probleem is dat we convoluties met verschillende indexen in deze lagen niet kunnen verwijderen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/d516ab886a28d62a34e6a934fdd62c12.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Daarom zullen we de lagen identificeren waarvan we de convoluties vrij kunnen verwijderen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/f9b69d9900d641e1d5835db9cc749189.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Laten we nu een werkcyclus opzetten:<\/p>\n<p><\/p>\n<ol>\n<li>Activaties exporteren<\/li>\n<li>Bepalen hoeveel te snijden <\/li>\n<li>Snijden<\/li>\n<li>Train 10 epochs met LR=1e-4 <\/li>\n<li>Testen <\/li>\n<\/ol>\n<p><\/p>\n<p>Het is nuttig om convoluties te exporteren om te beoordelen welk deel we bij een bepaalde stap kunnen verwijderen. Voorbeelden van export:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/cd8202e6ce1aa0cc59fbdc4bd8562427.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>We zien dat bijna overal 5% van de convoluties een zeer lage L1-norm heeft en we ze kunnen verwijderen. Bij elke stap werd deze export herhaald en werd beoordeeld uit welke lagen en hoeveel er kan worden gesneden. <\/p>\n<p><\/p>\n<p>Het hele proces viel binnen 4 stappen (hier en overal zijn de getallen voor RTX 2060 Super):<\/p>\n<p><\/p>\n<table>\n<thead>\n<tr>\n<th>Stap<\/th>\n<th>mAp75<\/th>\n<th>Aantal parameters, mln<\/th>\n<th>Netwerk grootte, mb<\/th>\n<th>Van het oorspronkelijke, %<\/th>\n<th>Tijd per run, ms<\/th>\n<th>Sneedvoorwaarde<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>0<\/td>\n<td>0.9656<\/td>\n<td>60<\/td>\n<td>241<\/td>\n<td>100<\/td>\n<td>180<\/td>\n<td>\u2014<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>0.9622<\/td>\n<td>55<\/td>\n<td>218<\/td>\n<td>91<\/td>\n<td>175<\/td>\n<td>5% van allemaal<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>0.9625<\/td>\n<td>50<\/td>\n<td>197<\/td>\n<td>83<\/td>\n<td>168<\/td>\n<td>5% van allemaal<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>0.9633<\/td>\n<td>39<\/td>\n<td>155<\/td>\n<td>64<\/td>\n<td>155<\/td>\n<td>15% voor lagen met 400+ convoluties<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>0.9555<\/td>\n<td>31<\/td>\n<td>124<\/td>\n<td>51<\/td>\n<td>146<\/td>\n<td>10% voor lagen met 100+ convoluties<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p>Bij stap 2 kwam er een positief effect bij \u2014 de batch-grootte 4 paste in het geheugen, wat het proces van fine-tuning aanzienlijk versneld heeft.<br \/>\nBij stap 4 werd het proces gestopt, omdat zelfs langdurige fine-tuning de mAp75 niet naar de oude waarden kon brengen.<br \/>\nUiteindelijk is het gelukt om de inferentie te versnellen met <strong>15%<\/strong>, de grootte te verminderen met<strong> 35% <\/strong>en geen nauwkeurigheid te verliezen. <\/p>\n<p><\/p>\n<h3 id=\"avtomatizaciya-dlya-bolee-prostyh-arhitektur\">Automatisering voor eenvoudigere architecturen<\/h3>\n<p><\/p>\n<p>Voor eenvoudigere netwerkarchitecturen (zonder voorwaardelijke add, concatenate en residuele blokken) kan men zich gerust richten op de verwerking van alle convolutielaag en het proces van het snijden van convoluties automatiseren.<\/p>\n<p><\/p>\n<p>Deze optie heb ik ge\u00efmplementeerd <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">hier<\/a><\/noindex>.<br \/>\nHet is heel eenvoudig: u heeft alleen een verliesfunctie, optimizer en batch-generatoren nodig:<\/p>\n<p><\/p>\n<pre><code class=\"python\">import pruning\nfrom keras.optimizers import Adam\nfrom keras.utils import Sequence\n\ntrain_batch_generator = BatchGenerator...\nscore_batch_generator = BatchGenerator...\n\nopt = Adam(lr=1e-4)\npruner = pruning.Pruner(\"config.json\", \"categorical_crossentropy\", opt)\n\npruner.prune(train_batch, valid_batch)<\/code><\/pre>\n<p><\/p>\n<p>Indien nodig kunnen de configuratieparameters worden gewijzigd:<\/p>\n<p><\/p>\n<pre><code class=\"json\">{\n    \"input_model_path\": \"model.h5\",\n    \"output_model_path\": \"model_pruned.h5\",\n    \"finetuning_epochs\": 10, # het aantal epochs voor training tussen de prune-stappen\n    \"stop_loss\": 0.1, # verlies voor het stoppen van het proces\n    \"pruning_percent_step\": 0.05, # deel van convs om te verwijderen bij elke prune-stap\n    \"pruning_standart_deviation_part\": 0.2 # verschuiving voor het beperken van de prune-deel\n}<\/code><\/pre>\n<p><\/p>\n<p>Additionally, a limit has been implemented based on the standard deviation. The goal is to restrict the removed part, excluding convolutions with already 'sufficient' L1 measures:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/c2733d01a4d5b6e9a97a1e683d87ff45.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hierdoor kunnen we alleen zwakke convoluties uit verdelingen zoals de rechter verwijderen en niet be\u00efnvloeden hoe we verwijderen uit verdelingen zoals de linker:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/a9c9bee6322d268026ffb6713fc0bc86.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bij benadering van een normale verdeling kan de coefficient pruning_standart_deviation_part worden gekozen uit:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/efee3eda6b8263de42e8f52541a3e949.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIk raad een marge van 2 sigma aan. Of je kunt deze eigenschap negeren, waarbij je de waarde &lt; 1.0 laat.<\/p>\n<p><\/p>\n<p>Het resultaat is een grafiek van de netwerkgrootte, verlies en verwerkingstijd van het netwerk over de hele test, genormaliseerd naar 1.0. Bijvoorbeeld, hier is de netwerkgrootte bijna met de helft verminderd zonder kwaliteitsverlies (een kleine convolutienetwerk met 100k gewichten):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-techniek voor het verminderen van convolutionele netwerken \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/1048ac38b12c753e54c8d8a2dc1dc394.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De verwerkingssnelheid is onderhevig aan normale fluktuaties en is praktisch niet veranderd. Hier is een verklaring voor:<\/p>\n<p><\/p>\n<ol>\n<li>Het aantal convoluties verandert van een handige (32, 64, 128) naar minder handige voor grafische kaarten - 27, 51, enzovoorts. Ik kan hierin fout zijn, maar het is waarschijnlijk dat dit invloed heeft.<\/li>\n<li>De architectuur is niet breed, maar sequentieel. Door de breedte te verkleinen, veranderen we de diepte niet. Hierdoor verminderen we de belasting, maar veranderen we de snelheid niet.<\/li>\n<\/ol>\n<p><\/p>\n<p>Daarom blijkt de verbetering in een vermindering van de CUDA-belasting van 20-30% tijdens de verwerking, maar niet in een vermindering van de verwerkingstijd.<\/p>\n<p><\/p>\n<h3 id=\"itogi\">Conclusies<\/h3>\n<p><\/p>\n<p>Laten we reflecteren. We hebben 2 varianten van pruning bekeken - voor YOLOv3 (waarbij handmatige aanpassingen nodig zijn) en voor netwerken met eenvoudigere architecturen. Het is duidelijk dat in beide gevallen de grootte van het netwerk kan worden verminderd en de snelheid kan worden verhoogd zonder nauwkeurigheid te verliezen. Resultaten:<\/p>\n<p><\/p>\n<ul>\n<li>Vermindering van de grootte<\/li>\n<li>Versnelling van de verwerking<\/li>\n<li>Vermindering van de CUDA-belasting<\/li>\n<li>Als gevolg hiervan, ecologische duurzaamheid (we optimaliseren de toekomstige benutting van rekenmiddelen. E\u00e9n persoon is blij over dit resultaat, <noindex><a rel=\"nofollow\" href=\"https:\/\/meduza.io\/feature\/2019\/12\/12\/kto-takaya-greta-tunberg-i-pochemu-ona-stala-chelovekom-goda-zhurnal-time\">Greta Thunberg<\/a><\/noindex>)<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"appendix\">Aanvulling<\/h3>\n<p><\/p>\n<ul>\n<li>Na de pruning-stap kun je ook kwantisatie toepassen (bijvoorbeeld met TensorRT)<\/li>\n<li>TensorFlow biedt mogelijkheden voor <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/model_optimization\/guide\/pruning\/pruning_with_keras\">low_magnitude_pruning<\/a><\/noindex>. Werkt.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">Repository<\/a><\/noindex> Ik wil me verder ontwikkelen en ben blij met hulp.<\/li>\n<\/ul>\n<p>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/482050\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u043e\u0431\u043e\u0439 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u0411\u0435\u0440\u0435\u0448\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 YOLOv3 \u0438 \u0434\u043e\u043e\u0431\u0443\u0447\u0430\u0435\u0448\u044c. \u0422\u043e\u0447\u043d\u043e\u0441\u0442\u044c(mAp75) \u0431\u043e\u043b\u044c\u0448\u0435 0.95. \u041d\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u0432\u0441\u0451 \u0435\u0449\u0435 \u043d\u0438\u0437\u043a\u0430\u044f. \u0427\u0435\u0440\u0442. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043e\u0431\u043e\u0439\u0434\u0451\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u043a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u044e. \u0410 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c Model Pruning \u2014 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0438\u0435 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f Inference \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u2014 \u043e\u0442\u043a\u0443\u0434\u0430, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u043a\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-54494","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0434 \u0442\u043e\u0431\u043e\u0439 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/nl\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0414\u0436\u0435\u0434\u0430\u0439\u0441\u043a\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u2014 pruning | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0434 \u0442\u043e\u0431\u043e\u0439 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-26T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:30+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Jedi-techniek voor het verminderen van convolutienetwerken \u2014 pruning | ProHoster","description":"Je hebt opnieuw een taak voor je.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0414\u0436\u0435\u0434\u0430\u0439\u0441\u043a\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u2014 pruning | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0434 \u0442\u043e\u0431\u043e\u0439 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.","og:url":"https:\/\/prohoster.info\/nl\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-26T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54494","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 11:34:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:29:04","updated":"2026-01-24 11:34:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/54494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=54494"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/54494\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=54494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=54494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=54494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}