{"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\/da\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","title":{"rendered":"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/cca85b86c64843707a2167a7fed19867.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Du st\u00e5r over for en ny opgave med objektdetektering. Prioriteten er hastighed med acceptabel pr\u00e6cision. Du tager YOLOv3-arkitekturen og finjusterer den. Pr\u00e6cisionen (mAp75) skal v\u00e6re over 0,95. Men hastigheden for k\u00f8rsel er stadig lav. Damn. <\/p>\n<p><\/p>\n<p>I dag springer vi kvantisering over. Og under overskriften kigger vi p\u00e5 <strong>Model Pruning<\/strong> \u2014 besk\u00e6ring af overfl\u00f8dige dele af netv\u00e6rket for at fremskynde inferensen uden at miste pr\u00e6cision. Illustrativt \u2014 hvor, hvor meget og hvordan man kan sk\u00e6re. Vi vil se p\u00e5, hvordan man g\u00f8r dette manuelt, og hvor man kan automatisere det. Til slut \u2014 et repository p\u00e5 keras.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"vvedenie\">Introduktion<\/h3>\n<p><\/p>\n<p>P\u00e5 mit tidligere arbejde, i Perms Macroscop, fik jeg en vane \u2014 altid at holde \u00f8je med udf\u00f8relsestiden for algoritmer. Og jeg tjekker altid tiden for netv\u00e6rk gennem en rimelighedstest. Normalt klarer state-of-the-art ikke denne test i produktion, hvilket f\u00f8rte mig til Pruning. <\/p>\n<p><\/p>\n<p>Pruning er et gammelt emne, der blev pr\u00e6senteret i <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=eZdOkDtYMoo\">Stanford-fforel\u00e6sningerne<\/a><\/noindex> i 2017. Hovedideen er at reducere st\u00f8rrelsen p\u00e5 det tr\u00e6nede netv\u00e6rk uden at miste pr\u00e6cision ved at fjerne forskellige noder. Det lyder godt, men jeg h\u00f8rer sj\u00e6ldent om dets anvendelse. M\u00e5ske mangler der implementationer, eller der er ikke artikler p\u00e5 russisk, eller m\u00e5ske mener alle, at pruning er en hemmelighed og holder det skjult.<br \/>\nMen lad os dykke ind i det<\/p>\n<p><\/p>\n<h3 id=\"vzglyad-v-biologiyu\">Et kig ind i biologi<\/h3>\n<p><\/p>\n<p>Jeg elsker, n\u00e5r der i Deep Learning tages ideer fra biologien. Som med evolutionen kan man stole p\u00e5 dem (vidste du, at ReLU ligner meget p\u00e5 <noindex><a rel=\"nofollow\" href=\"http:\/\/www.gatsby.ucl.ac.uk\/~lmate\/biblio\/dayanabbott.pdf\">neuroner i hjernens aktiveringsfunktion<\/a><\/noindex>?) <\/p>\n<p><\/p>\n<p>Processen med Model Pruning er ogs\u00e5 t\u00e6t knyttet til biologi. Netv\u00e6rkets reaktion her kan sammenlignes med hjernens plastisitet. Der er nogle interessante eksempler i bogen <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\">Norman Doidge<\/a><\/noindex>:<\/p>\n<p><\/p>\n<ol>\n<li>Hjernen hos en kvinde, der siden f\u00f8dslen kun havde den ene hjernehalvdel, omprogrammerede sig selv til at udf\u00f8re funktioner fra den manglende hjernehalvdel.<\/li>\n<li>En fyr sk\u00f8d en del af sin hjerne, som var ansvarlig for synet. Over tid overtog andre dele af hjernen disse funktioner. (vi pr\u00f8ver ikke at gentage)<\/li>\n<\/ol>\n<p><\/p>\n<p>S\u00e5ledes kan du ogs\u00e5 sk\u00e6re svage convolutioner fra din model. I v\u00e6rste fald vil de resterende convolutioner hj\u00e6lpe med at erstatte de sk\u00e5rne. <\/p>\n<p><\/p>\n<h3 id=\"lyubish-transfer-learning-ili-uchish-s-nulya\">Elsker du Transfer Learning eller tr\u00e6ner du fra bunden?<\/h3>\n<p><\/p>\n<p><strong>Mulighed nummer \u00e9t.<\/strong> Du bruger Transfer Learning p\u00e5 Yolov3, Retina, Mask-RCNN eller U-Net. Men oftest har vi ikke brug for at genkende 80 objektklasser, som i COCO. I min erfaring er det ofte 1-2 klasser. Man kan antage, at arkitekturen til 80 klasser her er overfl\u00f8dig. Det giver mening at overveje at reducere arkitekturen. Desuden vil jeg gerne g\u00f8re det uden at miste de forudtr\u00e6nede v\u00e6gte.<\/p>\n<p><\/p>\n<p><strong>Variant nummer to.<\/strong> M\u00e5ske har du mange data og beregningsressourcer, eller m\u00e5ske har du blot brug for en supertilpasset arkitektur. Uanset hvad, s\u00e5 tr\u00e6ner du netv\u00e6rket fra bunden. Den s\u00e6dvanlige r\u00e6kkef\u00f8lge er at se p\u00e5 datastrukturen, v\u00e6lge en OVERFL\u00d8DIG arkitektur og trykke dropout for at undg\u00e5 overfitting. Jeg har set dropouts p\u00e5 0.6, Karl. <\/p>\n<p><\/p>\n<p>I begge tilf\u00e6lde kan netv\u00e6rket reduceres. Det motiverede os. Nu skal vi unders\u00f8ge, hvad pruning indeb\u00e6rer.<\/p>\n<p><\/p>\n<h3 id=\"obschiy-algoritm\">Generel algoritme<\/h3>\n<p><\/p>\n<p>Vi besluttede, at vi kan fjerne convolutioner. Det ser ganske simpelt ud:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/1c01fa318d08550c9738c88d52e36b2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>At fjerne en hvilken som helst convolution er en stressfaktor for netv\u00e6rket, som normalt f\u00f8rer til en vis stigning i fejlen. P\u00e5 den ene side er denne fejlstigning et tegn p\u00e5, hvor korrekt vi fjerner convolutionerne (for eksempel siger en stor stigning, at vi g\u00f8r noget forkert). Men en lille stigning er helt acceptabel og kan ofte afhj\u00e6lpes med efterf\u00f8lgende let finjustering med en lille LR. Vi tilf\u00f8jer et fintunings trin:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/d51df9606d65fd4e7e80209743f761c3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nu skal vi forst\u00e5, hvorn\u00e5r vi vil stoppe vores LearningPruning cyklus. Her kan der v\u00e6re eksotiske muligheder, hvor vi \u00f8nsker at reducere netv\u00e6rket til en bestemt st\u00f8rrelse og hastighed (for eksempel til mobile enheder). Men den mest almindelige mulighed er at forts\u00e6tte cyklussen, indtil fejlen overstiger det acceptable niveau. Vi tilf\u00f8jer en betingelse:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/9032018847833b54402124a29d3acbb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u00e5 algoritmen bliver klar. Det er tilbage at finde ud af, hvordan man bestemmer, hvilke convolutioner der skal fjernes.<\/p>\n<p><\/p>\n<h3 id=\"poisk-udalyaemyh-svertok\">S\u00f8gning efter fjernbare convolutioner<\/h3>\n<p><\/p>\n<p>Vi skal fjerne nogle sammenfoldninger. At kaste sig hovedl\u00f8st ind i det og 'skyde' p\u00e5 hvilke som helst er en d\u00e5rlig id\u00e9, selvom det ville fungere. Men da vi har fornuft, kan vi t\u00e6nke os om og pr\u00f8ve at fremh\u00e6ve de 'svage' sammenfoldninger, der kan fjernes. Der er flere muligheder:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openreview.net\/pdf?id=rJqFGTslg\">Mindste L1-m\u00e5ling eller low_magnitude_pruning<\/a><\/noindex>. Ideen er, at convolutioner med sm\u00e5 v\u00e6gtv\u00e6rdier bidrager lidt til den endelige beslutning. <\/li>\n<li>Mindste L1-m\u00e5ling under hensyntagen til gennemsnit og standardafvigelse. Supplerer vurderingen af fordelingens karakter.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.08571\">Maskering af konvolutter og undtagelse af de mindst p\u00e5virkende p\u00e5 den samlede n\u00f8jagtighed<\/a><\/noindex>. Mere pr\u00e6cis bestemmelse af uv\u00e6sentlige konvolutter, men meget tids- og ressourcekr\u00e6vende. <\/li>\n<li>ReadinessGate <\/li>\n<\/ol>\n<p><\/p>\n<p>Hver af mulighederne har ret til at eksistere og sine implementeringsspecifikationer. Her ser vi p\u00e5 muligheden med den mindste L1-metric<\/p>\n<p><\/p>\n<h3 id=\"ruchnoy-process-dlya-yolov3\">Manuel proces for YOLOv3<\/h3>\n<p><\/p>\n<p>I den oprindelige arkitektur er der residualblokke. Men uanset hvor imponerende de er for dybe netv\u00e6rk, kan de v\u00e6re problematic for os. Problemet er, at vi ikke kan fjerne konvolutter med forskellige indekser i disse lag:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/d516ab886a28d62a34e6a934fdd62c12.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Derfor vil vi fremh\u00e6ve de lag, hvorfra vi frit kan fjerne konvolutter:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/f9b69d9900d641e1d5835db9cc749189.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lad os nu bygge arbejdscyklussen:<\/p>\n<p><\/p>\n<ol>\n<li>Eksporterer aktiveringer<\/li>\n<li>Vurderer, hvor meget der skal sk\u00e6res <\/li>\n<li>Sk\u00e6rer<\/li>\n<li>Tr\u00e6ner i 10 epoker med LR=1e-4 <\/li>\n<li>Testning <\/li>\n<\/ol>\n<p><\/p>\n<p>At eksportere konvolutter er nyttigt for at vurdere, hvilken del vi kan fjerne p\u00e5 en bestemt trin. Eksempler p\u00e5 eksport:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/cd8202e6ce1aa0cc59fbdc4bd8562427.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi ser, at n\u00e6sten overalt har 5% af konvolutterne en meget lav L1-norm, og vi kan fjerne dem. P\u00e5 hvert trin blev denne eksport gentaget, og der blev foretaget en vurdering af, hvilke lag og hvor mange der kunne sk\u00e6res. <\/p>\n<p><\/p>\n<p>Hele processen var opdelt i 4 trin (her og alle steder tal for RTX 2060 Super):<\/p>\n<p><\/p>\n<table>\n<thead>\n<tr>\n<th>Trin<\/th>\n<th>mAp75<\/th>\n<th>Antal parametre, mio<\/th>\n<th>Netv\u00e6rksst\u00f8rrelse, mb<\/th>\n<th>Fra den oprindelige, %<\/th>\n<th>K\u00f8retid, ms<\/th>\n<th>Betingelse for besk\u00e6ring<\/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% af alle<\/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% af alle<\/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% for lag med 400+ konvolutter<\/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% for lag med 100+ konvolutter<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p>Ved trin 2 opstod der en positiv effekt \u2014 batch-st\u00f8rrelse 4 blev muligt i hukommelsen, hvilket betydeligt fremskyndede genuddannelsesprocessen.<br \/>\nVed trin 4 blev processen stoppet, da selv langvarig genuddannelse ikke h\u00e6vede mAp75 til de gamle v\u00e6rdier.<br \/>\nSom et resultat lykkedes det at fremskynde inferensen med <strong>15%<\/strong>, reducere st\u00f8rrelsen med<strong> 35% <\/strong>og ikke miste i n\u00f8jagtighed. <\/p>\n<p><\/p>\n<h3 id=\"avtomatizaciya-dlya-bolee-prostyh-arhitektur\">Automatisering til enklere arkitekturer<\/h3>\n<p><\/p>\n<p>For enklere netv\u00e6rksarkitekturer (uden betingede add, concatenate og residualblokke) kan man helt sikkert fokusere p\u00e5 at bearbejde alle konvolutionslag og automatisere besk\u00e6ringsprocessen.<\/p>\n<p><\/p>\n<p>Denne mulighed har jeg implementeret <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">her<\/a><\/noindex>.<br \/>\nDet er enkelt: kun tab-funktionen, optimereren og batch-generatorerne er n\u00f8dvendig:<\/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>Hvis n\u00f8dvendigt kan konfigurationsparametrene \u00e6ndres:<\/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, # antallet af epoker til tr\u00e6ning mellem pruning trin\n    \"stop_loss\": 0.1, # tab for at stoppe processen\n    \"pruning_percent_step\": 0.05, # del af konvolutioner der slettes ved hver pruning trin\n    \"pruning_standart_deviation_part\": 0.2 # skift for at begr\u00e6nse pruning delen\n}<\/code><\/pre>\n<p><\/p>\n<p>Der er desuden implementeret en begr\u00e6nsning baseret p\u00e5 standardafvigelsen. M\u00e5let er at begr\u00e6nse antallet af fjernede, ved at udelukke sammenfoldninger med allerede 'tilstr\u00e6kkelige' L1-m\u00e5l:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/c2733d01a4d5b6e9a97a1e683d87ff45.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hermed tillader vi kun svage konvolutioner at blive fjernet fra fordelinger, der ligner den h\u00f8jre, uden at p\u00e5virke fjernelsen fra fordelinger, der ligner den venstre:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/a9c9bee6322d268026ffb6713fc0bc86.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e5r fordelingen n\u00e6rmer sig normalfordelingen, kan koefficienten pruning_standart_deviation_part v\u00e6lges fra:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/efee3eda6b8263de42e8f52541a3e949.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJeg anbefaler et toleranceniveau p\u00e5 2 sigmas. Alternativt kan man v\u00e6lge ikke at tage h\u00f8jde for denne egenskab og lade v\u00e6rdien v\u00e6re &lt; 1.0.<\/p>\n<p><\/p>\n<p>Udgangen resulterer i et diagram over netv\u00e6rkets st\u00f8rrelse, tab og k\u00f8retid over hele testen, normaliseret til 1.0. For eksempel, her blev netv\u00e6rkets st\u00f8rrelse n\u00e6sten halveret uden tab af kvalitet (en lille konvolutionel netv\u00e6rk med 100k v\u00e6gte):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jedi-teknik til reduktion af konvolutionsnetv\u00e6rk \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/1048ac38b12c753e54c8d8a2dc1dc394.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00f8retiden er udsat for normale udsving og har stort set ikke \u00e6ndret sig. Der er en forklaring p\u00e5 dette:<\/p>\n<p><\/p>\n<ol>\n<li>Antallet af konvolutioner \u00e6ndres fra mere bekvemme (32, 64, 128) til mindre bekvemme for grafikkort \u2014 27, 51 osv. Her kan jeg tage fejl, men sandsynligvis p\u00e5virker det.<\/li>\n<li>Arkitekturen er ikke bred, men sekventiel. Ved at mindske bredden r\u00f8rer vi ikke dybden. Dette reducerer belastningen, men \u00e6ndrer ikke hastigheden.<\/li>\n<\/ol>\n<p><\/p>\n<p>Derfor resulterede forbedringen i en reduktion af CUDA-belastningen under k\u00f8rslen med 20-30%, men ikke i en reduktion af k\u00f8retiden.<\/p>\n<p><\/p>\n<h3 id=\"itogi\">Resum\u00e9<\/h3>\n<p><\/p>\n<p>Lad os reflektere. Vi har overvejet 2 varianter af pruning \u2014 til YOLOv3 (hvor man m\u00e5 arbejde med h\u00e6nderne) og til netv\u00e6rk med simplere arkitekturer. Det er tydeligt, at det i begge tilf\u00e6lde er muligt at reducere netv\u00e6rkets st\u00f8rrelse og opn\u00e5 hurtigere k\u00f8retider uden at miste pr\u00e6cision. Resultaterne:<\/p>\n<p><\/p>\n<ul>\n<li>Reduceret st\u00f8rrelse<\/li>\n<li>Hurtigere k\u00f8retid<\/li>\n<li>Reduceret CUDA-belastning<\/li>\n<li>Som f\u00f8lge heraf, forbedret milj\u00f8venlighed (Vi optimerer fremtidig brug af beregningsressourcer. Et sted gl\u00e6der \u00e9n sig <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\">Bilag<\/h3>\n<p><\/p>\n<ul>\n<li>Efter pruning-trinnet kan man ogs\u00e5 finjustere og kvantisere (for eksempel med TensorRT)<\/li>\n<li>Tensorflow tilbyder muligheder for <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/model_optimization\/guide\/pruning\/pruning_with_keras\">low_magnitude_pruning<\/a><\/noindex>. Det fungerer.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">Repositoryet<\/a><\/noindex> jeg \u00f8nsker at udvikle mig og vil gl\u00e6de mig over hj\u00e6lp<\/li>\n<\/ul>\n<p>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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-teknikken til at reducere konvolutionelle netv\u00e6rk \u2014 pruning | ProHoster","description":"Du st\u00e5r igen over for en opgave.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/54494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=54494"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/54494\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=54494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=54494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=54494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}