{"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\/pt\/blog\/rabotaem-s-nejrosetyami-chek-list-dlya-otladki","title":{"rendered":"Trabalhando com redes neurais: lista de verifica\u00e7\u00e3o para depura\u00e7\u00e3o","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Trabalhando com redes neurais: lista de verifica\u00e7\u00e3o para depura\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/03\/8ce45093bfe44092cb25d947c32bb0b5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nO c\u00f3digo de produtos de software para aprendizado de m\u00e1quina muitas vezes \u00e9 complexo e bastante confuso. A detec\u00e7\u00e3o e elimina\u00e7\u00e3o de bugs nele \u00e9 uma tarefa que consome muitos recursos. At\u00e9 mesmo as mais simples <noindex><a rel=\"nofollow\" href=\"https:\/\/cs.stanford.edu\/people\/eroberts\/courses\/soco\/projects\/neural-networks\/Architecture\/feedforward.html\">redes neurais de feedforward<\/a><\/noindex> exigem uma abordagem s\u00e9ria em rela\u00e7\u00e3o \u00e0 arquitetura da rede, \u00e0 inicializa\u00e7\u00e3o de pesos e \u00e0 otimiza\u00e7\u00e3o da rede. Um pequeno erro pode levar ao surgimento de problemas indesejados.<\/p>\n<p>Este artigo \u00e9 dedicado ao algoritmo de depura\u00e7\u00e3o de suas redes neurais.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>A Skillbox recomenda:<\/b> Curso Pr\u00e1tico <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\">Desenvolvedor Python do zero<\/a><\/noindex>.<\/p>\n<p><b>Lembramos:<\/b> <i>para todos os leitores do \u00abHabr\u00bb \u2014 desconto de 10.000 rublos na inscri\u00e7\u00e3o em qualquer curso Skillbox com o c\u00f3digo promocional \u00abHabr\u00bb.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h3>O algoritmo consiste em cinco etapas:<\/h3>\n<p><\/p>\n<ul>\n<li>in\u00edcio simples;<\/li>\n<li>valida\u00e7\u00e3o de perdas;<\/li>\n<li>verifica\u00e7\u00e3o de resultados intermedi\u00e1rios e conex\u00f5es;<\/li>\n<li>diagn\u00f3stico de par\u00e2metros;<\/li>\n<li>monitoramento do funcionamento.<\/li>\n<\/ul>\n<p>\nSe algo lhe parecer mais interessante do que o restante, voc\u00ea pode ir diretamente a essas se\u00e7\u00f5es. <\/p>\n<h3>In\u00edcio Simples<\/h3>\n<p>\nDepurar uma rede neural com arquitetura complexa, regulariza\u00e7\u00e3o e programador de taxa de aprendizado \u00e9 mais dif\u00edcil do que uma rede comum. Aqui estamos sendo um pouco astutos, pois este item de depura\u00e7\u00e3o tem uma rela\u00e7\u00e3o indireta, mas ainda \u00e9 uma recomenda\u00e7\u00e3o importante.<\/p>\n<p>O in\u00edcio simples consiste na cria\u00e7\u00e3o de um modelo simplificado e seu treinamento em um \u00fanico conjunto (ponto) de dados.<\/p>\n<p><b>Primeiro criamos um modelo simplificado<\/b><\/p>\n<p>Para um in\u00edcio r\u00e1pido, criamos uma pequena rede com uma \u00fanica camada oculta e verificamos se tudo funciona corretamente. Em seguida, complicamos o modelo gradualmente, verificando cada novo aspecto de sua estrutura (camada adicional, par\u00e2metro, etc.), e seguimos em frente.<\/p>\n<p><b>Treinamos o modelo em um \u00fanico conjunto (ponto) de dados<\/b><\/p>\n<p>Como uma verifica\u00e7\u00e3o r\u00e1pida da viabilidade do seu projeto, voc\u00ea pode usar um ou dois pontos de dados para o treinamento, a fim de confirmar se o sistema est\u00e1 funcionando corretamente. A rede neural deve mostrar 100% de precis\u00e3o no treinamento e na verifica\u00e7\u00e3o. Se n\u00e3o for o caso, ou o modelo \u00e9 muito pequeno, ou voc\u00ea j\u00e1 tem um bug.<\/p>\n<p>Mesmo que tudo esteja bem, prepare o modelo para passar por uma ou v\u00e1rias \u00e9pocas antes de avan\u00e7ar.<\/p>\n<h3>Avalia\u00e7\u00e3o de Perdas<\/h3>\n<p>\nA avalia\u00e7\u00e3o de perdas \u00e9 a principal maneira de refinar o desempenho do modelo. Voc\u00ea precisa garantir que a perda corresponda \u00e0 tarefa, e que as fun\u00e7\u00f5es de perda sejam avaliadas em uma escala correta. Se voc\u00ea estiver usando mais de um tipo de perda, certifique-se de que todas estejam na mesma ordem e corretamente escalonadas.<\/p>\n<p>\u00c9 importante estar atento \u00e0s perdas iniciais. Verifique o qu\u00e3o pr\u00f3ximo o resultado real est\u00e1 do esperado, se o modelo come\u00e7ou com uma suposi\u00e7\u00e3o aleat\u00f3ria. Em <noindex><a rel=\"nofollow\" href=\"http:\/\/cs231n.github.io\/neural-networks-3\/#baby\">trabalho de Andrei Karpathy, \u00e9 sugerido o seguinte<\/a><\/noindex>: \"Certifique-se de que voc\u00ea est\u00e1 obtendo o resultado esperado ao come\u00e7ar a trabalhar com um pequeno n\u00famero de par\u00e2metros. \u00c9 melhor verificar imediatamente a perda de dados (definindo o grau de regulariza\u00e7\u00e3o como zero). Por exemplo, para CIFAR-10 com um classificador Softmax, esperamos que as perdas iniciais sejam 2.302, pois a probabilidade difusa esperada \u00e9 de 0,1 para cada classe (j\u00e1 que existem 10 classes), e a perda Softmax \u00e9 a probabilidade logar\u00edtmica negativa da classe correta como -ln(0.1) = 2.302.\"<\/p>\n<p>Para um exemplo bin\u00e1rio, \u00e9 feita uma an\u00e1lise similar para cada uma das classes. Por exemplo, os dados s\u00e3o: 20% 0's e 80% 1's. A perda inicial esperada ser\u00e1 de at\u00e9 \u20130,2ln (0,5) \u20130,8ln (0,5) = 0,693147. Se o resultado for maior que 1, isso pode indicar que os pesos da rede neural n\u00e3o est\u00e3o devidamente balanceados ou que os dados n\u00e3o est\u00e3o normalizados.<\/p>\n<h3>Verificamos os resultados intermedi\u00e1rios e as conex\u00f5es <\/h3>\n<p>\nPara depurar a rede neural, \u00e9 necess\u00e1rio entender a din\u00e2mica dos processos dentro da rede e o papel das camadas intermedi\u00e1rias, uma vez que elas est\u00e3o interconectadas. Aqui est\u00e3o erros t\u00edpicos que voc\u00ea pode encontrar:<\/p>\n<ul>\n<li>express\u00f5es incorretas para atualiza\u00e7\u00f5es de gradiente;<\/li>\n<li>atualiza\u00e7\u00f5es de pesos n\u00e3o aplicadas;<\/li>\n<li>gradientes desaparecendo ou explodindo (exploding gradients).<\/li>\n<\/ul>\n<p>\nSe os valores dos gradientes forem zero, isso significa que a taxa de aprendizado no otimizador \u00e9 muito baixa, ou que voc\u00ea encontrou uma express\u00e3o incorreta para a atualiza\u00e7\u00e3o do gradiente.<\/p>\n<p>Al\u00e9m disso, \u00e9 necess\u00e1rio monitorar os valores das fun\u00e7\u00f5es de ativa\u00e7\u00e3o, pesos e atualiza\u00e7\u00f5es de cada uma das camadas. Por exemplo, o montante das atualiza\u00e7\u00f5es de par\u00e2metros (pesos e vieses) <noindex><a rel=\"nofollow\" href=\"https:\/\/cs231n.github.io\/neural-networks-3\/#summary\">deve ser 1-e3<\/a><\/noindex>.<\/p>\n<p>H\u00e1 um fen\u00f4meno conhecido como \u201cDying ReLU\u201d ou <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Vanishing_gradient_problem\">\u201co problema do gradiente desaparecendo\u201d<\/a><\/noindex>, quando neur\u00f4nios ReLU produzem zero ap\u00f3s aprender um grande valor negativo (bias) para seus pesos. Esses neur\u00f4nios nunca mais ser\u00e3o ativados em nenhum dos dados.<\/p>\n<p>Voc\u00ea pode usar a verifica\u00e7\u00e3o do gradiente para identificar esses erros aproximando o gradiente com um m\u00e9todo num\u00e9rico. Se estiver pr\u00f3ximo dos gradientes calculados, o retropropaga\u00e7\u00e3o foi implementada corretamente. Para criar uma verifica\u00e7\u00e3o do gradiente, confira estes excelentes recursos do CS231. <noindex><a rel=\"nofollow\" href=\"http:\/\/cs231n.github.io\/neural-networks-3\/#gradcheck\">aqui<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"http:\/\/cs231n.github.io\/optimization-1\/#gradcompute\">aqui<\/a><\/noindex>, assim como <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=P6EtCVrvYPU\">a aula<\/a><\/noindex> do Andrew Ng sobre o tema.<\/p>\n<p><noindex>Faizan Sheikh<\/noindex> indica tr\u00eas principais m\u00e9todos de visualiza\u00e7\u00e3o de redes neurais:<\/p>\n<ul>\n<li>Pr\u00e9-dimensionais \u2014 m\u00e9todos simples que nos mostram a estrutura geral do modelo treinado. Eles incluem a sa\u00edda das formas ou filtros de camadas individuais da rede neural e dos par\u00e2metros em cada camada.<\/li>\n<li> Baseados em ativa\u00e7\u00f5es. Neles, deciframos as ativa\u00e7\u00f5es de neur\u00f4nios individuais ou grupos de neur\u00f4nios para entender suas fun\u00e7\u00f5es.<\/li>\n<li> Baseados em gradientes. Esses m\u00e9todos tendem a manipular os gradientes formados a partir da passagem para frente e para tr\u00e1s durante o treinamento do modelo (incluindo mapas de import\u00e2ncia e mapas de ativa\u00e7\u00e3o da classe).<\/li>\n<\/ul>\n<p>\nExistem v\u00e1rias ferramentas \u00fateis para visualizar ativa\u00e7\u00f5es e conex\u00f5es de camadas individuais, como <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=\"Trabalhando com redes neurais: lista de verifica\u00e7\u00e3o para depura\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/03\/56e7e88983d6772ef482bc8396dd52a2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Diagn\u00f3stico de par\u00e2metros<\/h3>\n<p>\nRedes neurais t\u00eam muitos par\u00e2metros que interagem entre si, complicando a otimiza\u00e7\u00e3o. De fato, esta se\u00e7\u00e3o \u00e9 objeto de pesquisa ativa por especialistas, portanto, as sugest\u00f5es abaixo devem ser vistas apenas como dicas, pontos de partida a partir dos quais voc\u00ea pode se basear.<\/p>\n<p><b>Tamanho do lote<\/b> (batch size) \u2014 se \u00e9 necess\u00e1rio que o tamanho do lote seja grande o suficiente para obter estimativas precisas do gradiente do erro, mas pequeno o suficiente para que a descida do gradiente estoc\u00e1stico (SGD) possa organizar sua rede. Tamanhos de lote pequenos levar\u00e3o a uma r\u00e1pida converg\u00eancia devido ao ru\u00eddo no processo de treinamento e, posteriormente, a dificuldades de otimiza\u00e7\u00e3o. Mais informa\u00e7\u00f5es podem ser encontradas <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1609.04836\">aqui<\/a><\/noindex>.<\/p>\n<p><b>Taxa de aprendizado<\/b> \u2014 muito baixa levar\u00e1 a uma converg\u00eancia lenta ou ao risco de ficar preso em m\u00ednimos locais. Ao mesmo tempo, uma alta taxa de aprendizado causar\u00e1 a diverg\u00eancia da otimiza\u00e7\u00e3o, pois voc\u00ea corre o risco de \"saltar\" atrav\u00e9s de uma parte da fun\u00e7\u00e3o de perda que \u00e9 profunda, mas estreita. Tente usar um agendamento de taxa para reduz\u00ed-la durante o treinamento da rede neural. No curso CS231n <noindex><a rel=\"nofollow\" href=\"http:\/\/cs231n.github.io\/neural-networks-3\/\">h\u00e1 uma grande se\u00e7\u00e3o dedicada a este problema<\/a><\/noindex>.<\/p>\n<p><b>Recorte de Gradiente<\/b>\u200a\u2014 recorte dos gradientes dos par\u00e2metros durante a retropropaga\u00e7\u00e3o at\u00e9 um valor m\u00e1ximo ou norma limite. \u00datil para resolver problemas com gradientes explosivos que voc\u00ea pode encontrar no terceiro item.<\/p>\n<p><b>Normaliza\u00e7\u00e3o em Lote<\/b> \u2014 \u00e9 usada para normalizar os dados de entrada de cada camada, ajudando a resolver o problema do desvio covariante interno. Se voc\u00ea estiver usando Dropout e Batch Norm juntamente, <noindex><a rel=\"nofollow\" href=\"https:\/\/towardsdatascience.com\/pitfalls-of-batch-norm-in-tensorflow-and-sanity-checks-for-training-networks-e86c207548c8\">consulte este artigo<\/a><\/noindex>.<\/p>\n<p><b>Descida de Gradiente Estoc\u00e1stica (SGD)<\/b> \u2014 h\u00e1 v\u00e1rias variantes de SGD que utilizam momento, taxas de aprendizagem adaptativas e o m\u00e9todo de Nesterov. No entanto, nenhuma delas tem uma vantagem clara em termos de efici\u00eancia de aprendizagem ou generaliza\u00e7\u00e3o (<noindex><a rel=\"nofollow\" href=\"http:\/\/ruder.io\/optimizing-gradient-descent\/\">detalhes aqui<\/a><\/noindex>).<\/p>\n<p><b>Regulariza\u00e7\u00e3o<\/b> \u2014 \u00e9 crucial para construir um modelo generaliz\u00e1vel, pois adiciona uma penaliza\u00e7\u00e3o pela complexidade do modelo ou valores extremos dos par\u00e2metros. Essa \u00e9 uma forma de reduzir a vari\u00e2ncia do modelo sem aumentar significativamente seu vi\u00e9s. Mais <noindex><a rel=\"nofollow\" href=\"http:\/\/cs231n.github.io\/neural-networks-3\/#ratio\">informa\u00e7\u00f5es detalhadas \u2014 aqui<\/a><\/noindex>.<\/p>\n<p>Para avaliar tudo por conta pr\u00f3pria, voc\u00ea precisa desativar a regulariza\u00e7\u00e3o e verificar o gradiente da perda de dados por conta pr\u00f3pria.<\/p>\n<p><b>Dropout <\/b>\u2014 \u00e9 mais um m\u00e9todo para organizar sua rede e evitar sobrecarga. Durante o treinamento, o dropout \u00e9 aplicado apenas mantendo a atividade do neur\u00f4nio com uma certa probabilidade p (hiperpar\u00e2metro) ou definindo-o como zero no caso contr\u00e1rio. Como resultado, a rede deve usar um subconjunto diferente de par\u00e2metros para cada lote de treinamento, o que diminui a domin\u00e2ncia de certos par\u00e2metros.<\/p>\n<p>Importante: se voc\u00ea estiver usando tanto o dropout quanto a normaliza\u00e7\u00e3o em lote, tenha cuidado com a ordem dessas opera\u00e7\u00f5es ou at\u00e9 mesmo com seu uso conjunto. Tudo isso ainda est\u00e1 sendo amplamente discutido e complementado. Aqui est\u00e3o duas discuss\u00f5es importantes sobre o tema <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/39691902\/ordering-of-batch-normalization-and-dropout\">no Stackoverflow<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1801.05134\">Arxiv<\/a><\/noindex>.<\/p>\n<h3>Controle de desempenho<\/h3>\n<p>\nTrata-se da documenta\u00e7\u00e3o de processos de trabalho e experimentos. Se nada for documentado, \u00e9 f\u00e1cil esquecer, por exemplo, qual a velocidade de aprendizado ou o peso das classes utilizadas. Com o controle, \u00e9 poss\u00edvel revisar e reproduzir experimentos anteriores sem problemas. Isso ajuda a reduzir o n\u00famero de experimentos duplicados.<\/p>\n<p>No entanto, a documenta\u00e7\u00e3o manual pode se tornar uma tarefa complexa em caso de grande volume de trabalho. Aqui, ferramentas como Comet.ml se tornam \u00fateis, ajudando a registrar automaticamente conjuntos de dados, altera\u00e7\u00f5es de c\u00f3digo, hist\u00f3rico de experimentos e modelos de produ\u00e7\u00e3o, incluindo informa\u00e7\u00f5es chave sobre seu modelo (hiperpar\u00e2metros, m\u00e9tricas de desempenho do modelo e dados do ambiente).<\/p>\n<p>Redes neurais podem ser bastante sens\u00edveis a pequenas mudan\u00e7as, o que pode levar a uma queda no desempenho do modelo. O rastreamento e a documenta\u00e7\u00e3o do trabalho s\u00e3o o primeiro passo a ser tomado para padronizar o ambiente e modelar.<\/p>\n<p><img decoding=\"async\" alt=\"Trabalhando com redes neurais: lista de verifica\u00e7\u00e3o para depura\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/03\/37b3e4ef97ea39a3d28ffca5c1dbf1e5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nEspero que este post possa ser um ponto de partida para voc\u00ea come\u00e7ar a depurar sua rede neural.<\/p>\n<blockquote><p><b>A Skillbox recomenda:<\/b><\/p>\n<ul>\n<li>Curso Pr\u00e1tico de Dois Anos <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\">Eu sou um desenvolvedor web PRO<\/a><\/noindex>.<\/li>\n<li>Curso 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\">\u00abDesenvolvedor C# do zero\u00bb<\/a><\/noindex>.<\/li>\n<li>Curso pr\u00e1tico de um ano <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\">\"Desenvolvedor PHP do zero ao PRO\"<\/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.3 - 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\/pt\/blog\/rabotaem-s-nejrosetyami-chek-list-dlya-otladki\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47 Trabalhando com redes neurais: checklist para depura\u00e7\u00e3o | ProHoster","description":"C\u00f3digo de produtos de software para machine learning.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/rabotaem-s-nejrosetyami-chek-list-dlya-otladki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/30028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=30028"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/30028\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=30028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=30028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=30028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}