{"id":30028,"date":"2019-10-31T21:33:18","date_gmt":"2019-10-31T18:33:18","guid":{"rendered":"https:\/\/prohoster.info\/blog\/rabotaem-s-nejrosetyami-chek-list-dlya-otladki\/"},"modified":"2019-10-31T21:33:18","modified_gmt":"2019-10-31T18:33:18","slug":"rabotaem-s-nejrosetyami-chek-list-dlya-otladki","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/rabotaem-s-nejrosetyami-chek-list-dlya-otladki","title":{"rendered":"Lavoriamo con reti neurali: checklist per il debug","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Lavoriamo con reti neurali: checklist per il debug\" src=\"\/wp-content\/uploads\/2019\/03\/8ce45093bfe44092cb25d947c32bb0b5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nIl codice dei prodotti software per l'apprendimento automatico \u00e8 spesso complesso e piuttosto contorto. L'individuazione e la risoluzione dei bug sono un compito che richiede molte risorse. Anche le pi\u00f9 semplici <noindex><a rel=\"nofollow\" href=\"https:\/\/cs.stanford.edu\/people\/eroberts\/courses\/soco\/projects\/neural-networks\/Architecture\/feedforward.html\">reti neurali feedforward<\/a><\/noindex> richiedono un approccio serio all'architettura di rete, all'inizializzazione dei pesi e all'ottimizzazione della rete. Un piccolo errore pu\u00f2 portare a problemi indesiderati.<\/p>\n<p>Questo articolo \u00e8 dedicato all'algoritmo per il debugging delle vostre reti neurali.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Skillbox consiglia:<\/b> Corso pratico <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/python\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=PTNDEV&amp;utm_content=articles&amp;utm_term=neuronet\">Sviluppatore Python da zero<\/a><\/noindex>.<\/p>\n<p><b>Ricordiamo:<\/b> <i>per tutti i lettori di \u00abHabr\u00bb \u2014 sconto di 10.000 rubli per l'iscrizione a qualsiasi corso Skillbox con il codice promozionale \u00abHabr\u00bb.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h3>L'algoritmo consiste in cinque fasi:<\/h3>\n<p><\/p>\n<ul>\n<li>partenza semplice;<\/li>\n<li>conferma della perdita;<\/li>\n<li>verifica dei risultati intermedi e delle connessioni;<\/li>\n<li>diagnosi dei parametri;<\/li>\n<li>monitoraggio del funzionamento.<\/li>\n<\/ul>\n<p>\nSe qualcosa vi sembra pi\u00f9 interessante rispetto ad altro, potete passare direttamente a queste sezioni. <\/p>\n<h3>Partenza semplice<\/h3>\n<p>\nE' pi\u00f9 complicato fare il debugging di una rete neurale con un'architettura complessa, regolarizzazione e scheduler della velocit\u00e0 di apprendimento rispetto a una normale. Qui stiamo un po' ingannando, poich\u00e9 questo punto ha una relazione indiretta con il debugging, ma \u00e8 comunque un consiglio importante.<\/p>\n<p>La partenza semplice consiste nel creare un modello semplificato e addestrarlo su un singolo set (punto) di dati.<\/p>\n<p><b>Iniziamo creando un modello semplificato<\/b><\/p>\n<p>Per una partenza rapida, creiamo una piccola rete con un unico strato nascosto e verifichiamo che tutto funzioni correttamente. Poi, aumentiamo gradualmente la complessit\u00e0 del modello, controllando ogni nuovo aspetto della sua struttura (strato aggiuntivo, parametro, ecc.) e proseguiamo.<\/p>\n<p><b>Addestriamo il modello su un singolo set (punto) di dati<\/b><\/p>\n<p>Come verifica rapida del funzionamento del vostro progetto, potete utilizzare uno o due punti di dati per confermare se il sistema funziona correttamente. La rete neurale dovrebbe mostrare il 100% di accuratezza nell'addestramento e nella verifica. Se non \u00e8 cos\u00ec, allora o il modello \u00e8 troppo piccolo, o avete gi\u00e0 un bug.<\/p>\n<p>Anche se tutto sembra andare bene, preparate il modello per passare attraverso una o pi\u00f9 epoche prima di andare oltre.<\/p>\n<h3>Valutazione della perdita<\/h3>\n<p>\nLa valutazione della perdita \u00e8 il metodo principale per affinare le prestazioni del modello. \u00c8 necessario assicurarsi che la perdita corrisponda al compito e che le funzioni di perdita siano valutate su una scala corretta. Se utilizzate pi\u00f9 di un tipo di perdita, assicuratevi che tutte siano dello stesso ordine e correttamente scalate.<\/p>\n<p>\u00c8 importante prestare attenzione alle perdite iniziali. Controlla quanto il risultato reale si avvicina a quello atteso, se il modello \u00e8 partito da una supposizione casuale. In <noindex><a rel=\"nofollow\" href=\"http:\/\/cs231n.github.io\/neural-networks-3\/#baby\">il lavoro di Andrey Karpati si propone quanto segue<\/a><\/noindex>: \u00abAssicurati che il risultato che ottieni sia quello previsto all'inizio del lavoro con un numero ridotto di parametri. \u00c8 meglio controllare subito la perdita dati (impostando il grado di regolarizzazione a zero). Ad esempio, per CIFAR-10 con classificatore Softmax ci aspettiamo che le perdite iniziali siano 2.302, poich\u00e9 la probabilit\u00e0 diffusa attesa \u00e8 0,1 per ogni classe (dato che ci sono 10 classi), e la perdita Softmax \u00e8 la probabilit\u00e0 logaritmica negativa della classe corretta, cio\u00e8 \u2013ln (0.1) = 2.302\u00bb.<\/p>\n<p>Per un esempio binario, si esegue un calcolo analogo per ciascuna delle classi. Ecco, ad esempio, i dati: 20% di 0 e 80% di 1. La perdita iniziale attesa sar\u00e0 fino a \u20130,2ln(0,5) \u20130,8ln(0,5) = 0,693147. Se il risultato \u00e8 superiore a 1, ci\u00f2 potrebbe indicare che i pesi della rete neurale non sono bilanciati correttamente o che i dati non sono normalizzati.<\/p>\n<h3>Controlliamo i risultati intermedi e le connessioni <\/h3>\n<p>\nPer il debug della rete neurale \u00e8 necessario comprendere la dinamica dei processi all'interno della rete e il ruolo dei singoli strati intermedi, poich\u00e9 sono collegati. Ecco alcuni errori tipici con cui potresti imbatterti:<\/p>\n<ul>\n<li>espressioni errate per gli aggiornamenti del gradiente;<\/li>\n<li>aggiornamenti dei pesi non applicati;<\/li>\n<li>gradienti che scompaiono o esplodono (exploding gradients).<\/li>\n<\/ul>\n<p>\nSe i valori del gradiente sono nulli, significa che la velocit\u00e0 di apprendimento nell'ottimizzatore \u00e8 troppo bassa, oppure che ti sei imbattuto in un'espressione errata per l'aggiornamento del gradiente.<\/p>\n<p>Inoltre, \u00e8 necessario monitorare i valori delle funzioni di attivazione, dei pesi e degli aggiornamenti di ciascuno degli strati. Ad esempio, l'entit\u00e0 degli aggiornamenti dei parametri (pesi e bias) <noindex><a rel=\"nofollow\" href=\"https:\/\/cs231n.github.io\/neural-networks-3\/#summary\">dovrebbe essere 1-e3<\/a><\/noindex>.<\/p>\n<p>Esiste un fenomeno noto come \u201cDying ReLU\u201d o <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Vanishing_gradient_problem\">\u00abproblema del gradiente scomparso\u00bb<\/a><\/noindex>, quando i neuroni ReLU producono zero dopo aver appreso un valore negativo elevato (bias) per i loro pesi. Questi neuroni non si attiveranno mai pi\u00f9 in nessun dato.<\/p>\n<p>Puoi utilizzare il controllo del gradiente per identificare questi errori approssimando il gradiente con un approccio numerico. Se \u00e8 vicino ai gradienti calcolati, allora la retropropagazione \u00e8 stata implementata correttamente. Per creare un controllo del gradiente, consulta queste risorse sorprendenti da CS231 <noindex><a rel=\"nofollow\" href=\"http:\/\/cs231n.github.io\/neural-networks-3\/#gradcheck\">qui<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"http:\/\/cs231n.github.io\/optimization-1\/#gradcompute\">qui<\/a><\/noindex>, insieme a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=P6EtCVrvYPU\">una lezione<\/a><\/noindex> di Andrew Ng su questo tema.<\/p>\n<p><noindex>Faizan Sheikh<\/noindex> indica tre principali metodi di visualizzazione delle reti neurali:<\/p>\n<ul>\n<li>Preliminari \u2014 metodi semplici che ci mostrano la struttura generale del modello addestrato. Questi includono l'output delle forme o dei filtri dei singoli strati della rete neurale e dei parametri in ogni strato.<\/li>\n<li> Basati sull'attivazione. Qui decodifichiamo le attivazioni di singoli neuroni o gruppi di neuroni per comprendere le loro funzioni.<\/li>\n<li> Basati sui gradienti. Questi metodi tendono a manipolare i gradienti che si formano dal passaggio avanti e indietro durante l'addestramento del modello (inclusi le mappe di importanza e le mappe di attivazione di classe).<\/li>\n<\/ul>\n<p>\nEsistono diversi strumenti utili per visualizzare le attivazioni e le connessioni dei singoli strati, come <noindex><a rel=\"nofollow\" href=\"https:\/\/conx.readthedocs.io\/en\/latest\/Getting%20Started%20with%20conx.html#What-is-ConX?\">ConX<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/guide\/tensorboard_histograms\">Tensorboard<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Lavoriamo con reti neurali: checklist per il debug\" src=\"\/wp-content\/uploads\/2019\/03\/56e7e88983d6772ef482bc8396dd52a2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Diagnostica dei parametri<\/h3>\n<p>\nLe reti neurali hanno un gran numero di parametri che interagiscono tra loro, complicando l'ottimizzazione. In effetti, questa sezione \u00e8 oggetto di attivi studi da parte degli esperti, quindi le indicazioni seguenti devono essere considerate solo come suggerimenti, punti di partenza su cui basarsi.<\/p>\n<p><b>Dimensione del batch<\/b> (batch size) \u2014 se necessario, affinch\u00e9 la dimensione del batch sia sufficientemente grande per ottenere stime accurate del gradiente di errore, ma sufficientemente piccola affinch\u00e9 il gradiente stocastico discendente (SGD) possa ordinare la tua rete. Piccole dimensioni del batch porteranno a una rapida convergenza grazie al rumore durante il processo di addestramento e, in seguito, a difficolt\u00e0 di ottimizzazione. Maggiori dettagli sono descritti <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1609.04836\">qui<\/a><\/noindex>.<\/p>\n<p><b>Tasso di apprendimento<\/b> \u2014 troppo basso porter\u00e0 a una lenta convergenza o al rischio di rimanere bloccati in minimi locali. Allo stesso tempo, un alto tasso di apprendimento causer\u00e0 divergenza nell'ottimizzazione, poich\u00e9 rischi di 'saltare' attraverso una parte profonda ma stretta della funzione di perdita. Prova a usare la pianificazione del tasso per abbassarlo durante l'addestramento della rete neurale. Nel corso CS231n <noindex><a rel=\"nofollow\" href=\"http:\/\/cs231n.github.io\/neural-networks-3\/\">c'\u00e8 una grande sezione dedicata a questo problema<\/a><\/noindex>.<\/p>\n<p><b>Taglio del gradiente<\/b>\u200a \u2014 il taglio dei gradienti dei parametri durante la retropropagazione rispetto al valore massimo o alla norma limite. Utile per affrontare problemi con i gradienti esplosivi che potresti incontrare nel terzo punto.<\/p>\n<p><b>Normalizzazione batch<\/b> \u2014 \u00e8 usata per normalizzare i dati in ingresso di ogni strato, risolvendo cos\u00ec il problema del cambio di covarianza interno. Se stai usando Dropout e Batch Normalization insieme, <noindex><a rel=\"nofollow\" href=\"https:\/\/towardsdatascience.com\/pitfalls-of-batch-norm-in-tensorflow-and-sanity-checks-for-training-networks-e86c207548c8\">dai un'occhiata a questo articolo<\/a><\/noindex>.<\/p>\n<p><b>Discesa del gradiente stocastica (SGD)<\/b> \u2014 ci sono diverse varianti di SGD che utilizzano impulso, velocit\u00e0 di apprendimento adattive e metodo di Nesterov. Nessuna di queste offre un chiaro vantaggio in termini di efficienza di apprendimento o generalizzazione (<noindex><a rel=\"nofollow\" href=\"http:\/\/ruder.io\/optimizing-gradient-descent\/\">i dettagli qui<\/a><\/noindex>).<\/p>\n<p><b>Regolarizzazione<\/b> \u2014 \u00e8 fondamentale per costruire un modello generalizzabile, in quanto aggiunge una penalit\u00e0 per la complessit\u00e0 del modello o per i valori estremi dei parametri. \u00c8 un modo per ridurre la varianza del modello senza aumentare significativamente il suo bias. Ulteriori <noindex><a rel=\"nofollow\" href=\"http:\/\/cs231n.github.io\/neural-networks-3\/#ratio\">informazioni dettagliate \u2014 qui<\/a><\/noindex>.<\/p>\n<p>Per valutare tutto da solo, \u00e8 necessario disattivare la regolarizzazione e controllare autonomamente il gradiente della perdita dei dati.<\/p>\n<p><b>Dropout <\/b>\u2014 \u00e8 un altro metodo per regolare la tua rete per prevenire l'overfitting. Durante l'addestramento, il dropout avviene solo mantenendo attivo un neurone con una certa probabilit\u00e0 p (iperparametro) o impostandolo a zero in caso contrario. Di conseguenza, la rete deve utilizzare un altro sottoinsieme di parametri per ogni lotto di addestramento, riducendo le variazioni di determinati parametri che diventano dominanti.<\/p>\n<p>Importante: se stai utilizzando sia il dropout che la normalizzazione batch, fai attenzione all'ordine di queste operazioni o anche al loro utilizzo combinato. Tutto ci\u00f2 \u00e8 ancora attivamente discusso e ampliato. Ecco due importanti discussioni su questo tema <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/39691902\/ordering-of-batch-normalization-and-dropout\">su Stackoverflow<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1801.05134\">Arxiv<\/a><\/noindex>.<\/p>\n<h3>Controllo del lavoro<\/h3>\n<p>\nSi tratta della documentazione dei processi lavorativi e degli esperimenti. Se non si documenta nulla, \u00e8 facile dimenticare, ad esempio, quale sia la velocit\u00e0 di apprendimento utilizzata o il peso delle classi. Grazie al controllo, \u00e8 possibile rivedere e riprodurre senza problemi gli esperimenti precedenti. Questo consente di ridurre il numero di esperimenti duplicati.<\/p>\n<p>Tuttavia, la documentazione manuale pu\u00f2 diventare un compito difficile in caso di un gran numero di attivit\u00e0. In questo caso, strumenti come Comet.ml possono aiutare ad automatizzare il logging dei set di dati, delle modifiche al codice, della storia degli esperimenti e dei modelli di produzione, inclusi i dati chiave sul tuo modello (iperparametri, metriche delle prestazioni del modello e informazioni sull'ambiente).<\/p>\n<p>Una rete neurale pu\u00f2 essere piuttosto sensibile a piccole variazioni, il che porta a un calo delle prestazioni del modello. Monitorare e documentare il lavoro \u00e8 il primo passo da intraprendere per standardizzare l'ambiente e il modellamento.<\/p>\n<p><img decoding=\"async\" alt=\"Lavoriamo con reti neurali: checklist per il debug\" src=\"\/wp-content\/uploads\/2019\/03\/37b3e4ef97ea39a3d28ffca5c1dbf1e5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nSpero che questo post possa diventare un punto di partenza da cui iniziare a mettere a punto la tua rete neurale.<\/p>\n<blockquote><p><b>Skillbox consiglia:<\/b><\/p>\n<ul>\n<li>Corso pratico di due anni <noindex><a rel=\"nofollow\" href=\"https:\/\/iamwebdev.skillbox.ru\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=WEBDEVPRO&amp;utm_content=articles&amp;utm_term=neuronet\">\u00abSono un web developer PRO\u00bb<\/a><\/noindex>.<\/li>\n<li>Corso online <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/c-sharp\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=CSHDEV&amp;utm_content=articles&amp;utm_term=neuronet\">\u00abSviluppatore C# da 0\u00bb<\/a><\/noindex>.<\/li>\n<li>Corso pratico annuale <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/php\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=PHPDEV&amp;utm_content=articles&amp;utm_term=neuronet\">\u00abSviluppatore PHP da 0 a PRO\u00bb<\/a><\/noindex>.\n<\/li>\n<\/ul>\n<\/blockquote>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillbox\/blog\/444684\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u043c. \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438 \u043b\u0438\u043a\u0432\u0438\u0434\u0430\u0446\u0438\u044f \u0431\u0430\u0433\u043e\u0432 \u0432 \u043d\u0435\u043c \u2014 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0414\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0435 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0441 \u043f\u0440\u044f\u043c\u043e\u0439 \u0441\u0432\u044f\u0437\u044c\u044e \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043a \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0435\u0441\u043e\u0432, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u0438. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432\u0430\u0448\u0438\u0445 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. Skillbox \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442: [&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":[],"tags":[],"class_list":["post-30028","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e.\" \/>\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\/it\/blog\/rabotaem-s-nejrosetyami-chek-list-dlya-otladki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044f\u043c\u0438: \u0447\u0435\u043a-\u043b\u0438\u0441\u0442 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/rabotaem-s-nejrosetyami-chek-list-dlya-otladki\" \/>\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-10-31T18:33:18+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:33:18+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\udd47Lavoriamo con le reti neurali: check-list per il debug | ProHoster","description":"Codice per software di machine learning.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/rabotaem-s-nejrosetyami-chek-list-dlya-otladki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044f\u043c\u0438: \u0447\u0435\u043a-\u043b\u0438\u0441\u0442 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 | ProHoster","og:description":"\u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e.","og:url":"https:\/\/prohoster.info\/it\/blog\/rabotaem-s-nejrosetyami-chek-list-dlya-otladki","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-10-31T18:33:18+00:00","article:modified_time":"2019-10-31T18:33:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30028","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":"Article","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-20 23:28:27","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:43:15","updated":"2026-01-20 23:28:27","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/30028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=30028"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/30028\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=30028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=30028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=30028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}