{"id":1258,"date":"2017-12-06T21:18:07","date_gmt":"2017-12-06T21:18:07","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=1258"},"modified":"2024-12-16T22:32:44","modified_gmt":"2024-12-16T19:32:44","slug":"simple-example-tensorflow","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/pt\/2017\/12\/06\/simple-example-tensorflow\/","title":{"rendered":"Exemplo simples do TensorFlow"},"content":{"rendered":"<p>Apresento a sua aten\u00e7\u00e3o um exemplo simples de como trabalhar com um framework para trabalhar com Deep Learning &#8211; TensorFlow. Neste exemplo, ensinaremos uma rede neural a detectar n\u00fameros positivos, negativos e zero. Instala\u00e7\u00e3o do <a href=\"https:\/\/www.tensorflow.org\/\" target=\"_blank\" rel=\"noopener\">TensorFlow<\/a> e <a href=\"https:\/\/developer.nvidia.com\/ cuda -downloads\" target=\"_blank\" rel=\"noopener\">CUDA<\/a> Eu te instruo, esta tarefa realmente n\u00e3o \u00e9 f\u00e1cil)<\/p>\n<p>Para resolver problemas de classifica\u00e7\u00e3o, <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0 %BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8 \" target=\"_blank\" rel=\"noopener\">classificadores<\/a>. <a href=\"https:\/\/www.tensorflow.org\/\" target=\"_blank\" rel=\"noopener\">TensorFlow<\/a> tem v\u00e1rios classificadores de alto n\u00edvel prontos que exigem configura\u00e7\u00e3o m\u00ednima para funcionar. Primeiro, treinaremos <a href=\"https:\/\/www.tensorflow.org\/versions\/master\/api_docs\/python\/tf\/estimator\/DNNClassifier\" target=\"_blank\" rel=\"noopener\">DNNClassifier<\/a> usando conjunto de dados com n\u00fameros positivos, negativos e zero &#8211; com os &#8220;r\u00f3tulos&#8221; corretos. No n\u00edvel humano, um conjunto de dados \u00e9 um conjunto de n\u00fameros com resultados de classifica\u00e7\u00e3o (r\u00f3tulos):<\/p>\n<p><strong><em>10 &#8211; positivo<\/em><\/strong><br \/><strong><em>-22&#8211; negativo<\/em><\/strong><br \/><strong><em>0 &#8211; zero<\/em><\/strong><br \/><strong><em>42 &#8211; positivo<br \/>&#8230; outros n\u00fameros com classifica\u00e7\u00e3o<br \/><\/em><\/strong><br \/>Em seguida, inicia-se o treinamento, ap\u00f3s o qual voc\u00ea pode inserir n\u00fameros que nem foram inclu\u00eddos no conjunto de dados &#8211; a rede neural deve identific\u00e1-los corretamente.<br \/>Abaixo est\u00e1 o c\u00f3digo completo do classificador com gerador de conjunto de dados para treinamento e dados de entrada:<br \/><!-- HTML gerado usando hilite.me --><\/p>\n<div style=\"background: #ffffff; overflow: auto; largura: auto; borda: cinza s\u00f3lido; largura da borda: .1em .1em .1em .8em; preenchimento: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008800; font-weight: negrito;\">importar<\/span> <span style=\"color: #0e84b5 ; peso da fonte: negrito;\">tensorflow<\/span><span style=\"color: #008800; font-weight: negrito;\">importar<\/span> <span style=\"color: #0e84b5; font-weight: negrito;\">itertools<\/span><span style=\"color: #008800; font-weight: negrito;\">importar<\/span> <span style=\"color: #0e84b5; font-weight: negrito;\">aleat\u00f3rio<\/span><span style=\"color: #008800; font-weight: negrito;\">de<\/span> <span style=\"color: #0e84b5; font-weight: negrito;\">tempo<\/span> <span style= \"color: #008800; font-weight: negrito;\">tempo de importa\u00e7\u00e3o<\/span><span style=\"color: #008800; font-weight: negrito;\">class<\/span> <span style=\"color: #bb0066; font-weight: negrito;\">ClassifiedNumber<\/span>:__n\u00famero <span style=\"color: #333333;\">=<\/span> <span style=\"color: #0000dd; font-weight: negrito;\">0<\/span>__classifiedAs <span style=\"color: #333333;\">=<\/span> <span style=\"color: #0000dd; font-weight: negrito;\">3<\/span><span style=\"color: #008800; font-weight: negrito;\">def<\/span> <span style=\"color: #0066bb; font-weight: negrito;\">__init__<\/span>(<span style =\"color: #007020;\">self<\/span>, n\u00famero):<span style=\"color: #007020;\">self<\/span><span style=\"color: #333333;\">.<\/span>__number <span style=\"color: #333333;\">=<\/ intervalo> n\u00famero<span style=\"color: #008800; font-weight: bold;\">if<\/span> n\u00famero <span style=\"color: #333333;\">==<\/span> <span style=\"color: # 0000dd; peso da fonte: negrito;\">0<\/span>:<span style=\"color: #007020;\">self<\/span><span style=\"color: #333333;\">.<\/span>__classifiedAs <span style=\"color: #333333;\">=<\/ span> <span style=\"color: #0000dd; font-weight: negrito;\">0<\/span> <span style=\"color: #888888;\"># zero<\/span><span style=\"color: #008800; font-weight: bold;\">elif<\/span> n\u00famero <span style=\"color: #333333;\">&gt;<\/span> <span style=\"color: # 0000dd; peso da fonte: negrito;\">0<\/span>:<span style=\"color: #007020;\">self<\/span><span style=\"color: #333333;\">.<\/span>__classifiedAs <span style=\"color: #333333;\">=<\/ span> <span style=\"color: #0000dd; font-weight: negrito;\">1<\/span> <span style=\"color: #888888;\"># positivo<\/span><span style=\"color: #008800; font-weight: negrito;\">elif<\/span> n\u00famero <span style=\"color: #333333;\">&lt;<\/span> <span style=\"color: # 0000dd; peso da fonte: negrito;\">0<\/span>:<span style=\"color: #007020;\">self<\/span><span style=\"color: #333333;\">.<\/span>__classifiedAs <span style=\"color: #333333;\">=<\/ span> <span style=\"color: #0000dd; font-weight: negrito;\">2<\/span> <span style=\"color: #888888;\"># negativo<\/span><span style=\"color: #008800; font-weight: negrito;\">def<\/span> <span style=\"color: #0066bb; font-weight: negrito;\">n\u00famero<\/span>(<span style =\"cor: #007020;\">eu<\/span>):<span style=\"color: #008800; font-weight: bold;\">return<\/span> <span style=\"color: #007020;\">self<\/span><span style=\"color: #333333; \">.<\/span>__n\u00famero<span style=\"color: #008800; font-weight: negrito;\">def<\/span> <span style=\"color: #0066bb; font-weight: negrito;\">classificadoAs<\/span>(<span style =\"cor: #007020;\">eu<\/span>):<span style=\"color: #008800; font-weight: bold;\">return<\/span> <span style=\"color: #007020;\">self<\/span><span style=\"color: #333333; \">.<\/span>__classificadoAs<span style=\"color: #008800; font-weight: negrito;\">def<\/span> <span style=\"color: #0066bb; font-weight: negrito;\">classifiedAsString<\/span>(classifiedAs):<span style=\"color: #008800; font-weight: negrito;\">if<\/span> classificadoAs <span style=\"color: #333333;\">==<\/span> <span style=\"color: # 0000dd; peso da fonte: negrito;\">0<\/span>:<span style=\"color: #008800; font-weight: negrito;\">return<\/span> <span style=\"background-color: #fff0f0;\">\"Zero\"<\/span><span style=\"color: #008800; font-weight: negrito;\">elif<\/span> classificadoAs <span style=\"color: #333333;\">==<\/span> <span style=\"color: # 0000dd; peso da fonte: negrito;\">1<\/span>:<span style=\"color: #008800; font-weight: bold;\">return<\/span> <span style=\"background-color: #fff0f0;\">\"Positivo\"<\/span><span style=\"color: #008800; font-weight: negrito;\">elif<\/span> classificadoAs <span style=\"color: #333333;\">==<\/span> <span style=\"color: # 0000dd; peso da fonte: negrito;\">2<\/span>:<span style=\"color: #008800; font-weight: bold;\">return<\/span> <span style=\"background-color: #fff0f0;\">\"Negativo\"<\/span><span style=\"color: #008800; font-weight: negrito;\">def<\/span> <span style=\"color: #0066bb; font-weight: negrito;\">trainDatasetFunction<\/span>():trainNumbers <span style=\"color: #333333;\">=<\/span> []trainNumberLabels <span style=\"color: #333333;\">=<\/span> []<span style=\"color: #008800; font-weight: negrito;\">para<\/span> i <span style=\"color: #000000; font-weight: negrito;\">em<\/span> <span style =\"color: #007020;\">intervalo<\/span>(<span style=\"color: #333333;\">-<\/span><span style=\"color: #0000dd; peso da fonte: negrito;\">1000<\/span>, <span style=\"color: #0000dd; peso da fonte: negrito;\">1001<\/span>):n\u00famero <span style=\"color: #333333;\">=<\/span> N\u00fameroClassificado(i)trainNumbers<span style=\"color: #333333;\">.<\/span>append(number<span style=\"color: #333333;\">.<\/span>number())trainNumberLabels<span style=\"color: #333333;\">.<\/span>append(number<span style=\"color: #333333;\">.<\/span>classifiedAs())<span style=\"color: #008800; font-weight: bold;\">return<\/span> ( {<span style=\"background-color: #fff0f0;\">\"number\"<\/span> : trainNumbers } , trainNumberLabels)<span style=\"color: #008800; font-weight: negrito;\">def<\/span> <span style=\"color: #0066bb; font-weight: negrito;\">inputDatasetFunction<\/span>():<span style=\"color: #008800; font-weight: negrito;\">global<\/span> randomSeedrandom<span style=\"color: #333333;\">.<\/span>seed(randomSeed) <span style=\"color: #888888;\"># para obter o mesmo resultado<\/span>n\u00fameros <span style=\"color: #333333;\">=<\/span> []<span style=\"color: #008800; font-weight: negrito;\">para<\/span> i <span style=\"color: #000000; font-weight: negrito;\">em<\/span> <span style =\"color: #007020;\">intervalo<\/span>(<span style=\"color: #0000dd; font-weight: negrito;\">0<\/span>, <span style=\"color: #0000dd; font-weight: negrito;\">4<\/span>):n\u00fameros<span style=\"color: #333333;\">.<\/span>append(random<span style=\"color: #333333;\">.<\/span>randint(<span style=\"color: #333333; \">-<\/span><span style=\"color: #0000dd; font-weight: negrito;\">9999999<\/span>, <span style=\"color: #0000dd; peso da fonte: negrito;\">9999999<\/span>))<span style=\"color: #008800; font-weight: bold;\">return<\/span> {<span style=\"background-color: #fff0f0;\">\"n\u00famero\"<\/span> : n\u00fameros }<span style=\"color: #008800; font-weight: negrito;\">def<\/span> <span style=\"color: #0066bb; font-weight: negrito;\">principal<\/span>():<span style=\"color: #007020;\">print<\/span>(<span style=\"background-color: #fff0f0;\">\"Teste do classificador de n\u00fameros Positive-Negative-Zero do TensorFlow por demensdeum 2017 (demensdeum@gmail. com)\"<\/span>)maximalClassesCount <span style=\"color: #333333;\">=<\/span> <span style=\"color: #007020;\">len<\/span>(<span style=\"color: #007020;\">definir< \/span>(trainDatasetFunction()[<span style=\"color: #0000dd; font-weight: negrito;\">1<\/span>])) <span style=\"color: #333333;\">+<\/span> <span style=\"color: #0000dd; font-weight: negrito;\">1<\/span>numberFeature <span style=\"color: #333333;\">=<\/span> tensorflow<span style=\"color: #333333;\">.<\/span>feature_column<span style=\"color: #333333;\">. <\/span>numeric_column(<span style=\"background-color: #fff0f0;\">\"n\u00famero\"<\/span>)classificador <span style=\"color: #333333;\">=<\/span> tensorflow<span style=\"color: #333333;\">.<\/span>estimador<span style=\"color: #333333;\">. <\/span>DNNClassifier(feature_columns <span style=\"color: #333333;\">=<\/span> [numberFeature], unidades_ocultas <span style=\"color: #333333;\">=<\/span> [<span style=\"color: #0000dd; font-weight: negrito;\">10<\/span>, <span style=\"color: # 0000dd; peso da fonte: negrito;\">20<\/span>, <span style=\"color: #0000dd; peso da fonte: negrito;\">10<\/span>], n_classes <span style=\"color: #333333;\">=<\/span> maximalClassesCount)gerador <span style=\"color: #333333;\">=<\/span> classificador<span style=\"color: #333333;\">.<\/span>train(input_fn <span style=\"color: #333333;\" >=<\/span> trainDatasetFunction, etapas <span style=\"color: #333333;\">=<\/span> <span style=\"color: #0000dd; peso da fonte: negrito;\">1000<\/span>)<span style=\"color: #333333;\">.<\/span>predict(input_fn <span style=\"color: #333333;\">= <\/span> inputDatasetFunction)inputDataset <span style=\"color: #333333;\">=<\/span> inputDatasetFunction()resultados <span style=\"color: #333333;\">=<\/span> <span style=\"color: #007020;\">lista<\/span>(itertools<span style=\"color: #333333;\">. <\/span>islice(generator, <span style=\"color: #007020;\">len<\/span>(inputDatasetFunction()[<span style=\"cor de fundo: #fff0f0;\">\"n\u00famero\"<\/span>])))i <span style=\"color: #333333;\">=<\/span> <span style=\"color: #0000dd; font-weight: negrito;\">0<\/span><span style=\"color: #008800; font-weight: negrito;\">para<\/span> resultado <span style=\"color: #000000; font-weight: negrito;\">em<\/span> resultados:<span style=\"color: #007020;\">imprimir<\/span>(<span style=\"background-color: #fff0f0;\">\"n\u00famero: %d classificado como %s\"<\/span> <span style= \"color: #333333;\">%<\/span> (inputDataset[<span style=\"background-color: #fff0f0;\">\"n\u00famero\"<\/span>][i], classificadoAsString(result[<span style=\"background-color: #fff0f0;\">\"class_ids\"<\/span>][<span style=\"color: #0000dd; font-weight: negrito;\">0<\/span> ])))i <span style=\"color: #333333;\">+=<\/span> <span style=\"color: #0000dd; font-weight: negrito;\">1<\/span>randomSeed <span style=\"color: #333333;\">=<\/span> tempo()principal()<\/pr\u00e9><\/div>\n<p>Tudo come\u00e7a no m\u00e9todo main(), definimos a coluna num\u00e9rica com a qual o classificador ir\u00e1 funcionar &#8211; <strong>tensorflow.feature_column.numeric_column(&#8220;number&#8221;)<\/strong> Em seguida, os par\u00e2metros do classificador s\u00e3o definidos. \u00c9 in\u00fatil descrever os argumentos de inicializa\u00e7\u00e3o atuais, pois a API muda todos os dias, e voc\u00ea definitivamente deve consultar a documenta\u00e7\u00e3o da vers\u00e3o instalada do TensorFlow e n\u00e3o confiar em manuais desatualizados.<\/p>\n<p>Em seguida, \u00e9 lan\u00e7ado o treinamento indicando uma fun\u00e7\u00e3o que retorna um conjunto de dados de n\u00fameros de -1000 a 1000 (<strong>trainDatasetFunction<\/strong>), com a classifica\u00e7\u00e3o correta desses n\u00fameros com base em positivo, negativo ou zero. A seguir, enviamos como entrada n\u00fameros que n\u00e3o estavam no conjunto de dados de treinamento &#8211; aleat\u00f3rio de -9999999 a 9999999 (<strong>inputDatasetFunction<\/strong>) para classific\u00e1-los.<\/p>\n<p>Finalmente, lan\u00e7amos itera\u00e7\u00f5es com base no n\u00famero de dados de entrada (<strong>itertools.islice<\/strong>), imprimimos o resultado, executamos e ficamos surpresos:<\/p>\n<p><!-- HTML gerado usando hilite.me --><\/p>\n<div style=\"background: #ffffff; overflow: auto; largura: auto; borda: cinza s\u00f3lido; largura da borda: .1em .1em .1em .8em; preenchimento: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\">n\u00famero: 4063470 classificado como Positivon\u00famero: 6006715 classificado como Positivon\u00famero: -5367127 classificado como Negativon\u00famero: -7834276 classificado como Negativo<\/pr\u00e9><\/div>\n<blockquote class=\"imgur-embed-pub\" lang=\"en\" data-id=\"mTS5bXR\">\n<p><a href=\"\/\/imgur.com\/mTS5bXR\">EST\u00c1 VIVO<\/a <\/p>\n<\/blockquote>\n<p><script async src=\"\/\/s.imgur.com\/min\/embed.js\" charset=\"utf-8\"><\/script><\/p>\n<p>Para ser honesto, ainda estou um pouco surpreso que o classificador *entenda* at\u00e9 mesmo aqueles n\u00fameros que eu n\u00e3o ensinei. Espero que no futuro eu entenda o t\u00f3pico de aprendizado de m\u00e1quina com mais detalhes e que haja mais tutoriais.<\/p>\n<p>GitLab:<br \/><a href=\"https:\/\/gitlab.com\/demensdeum\/MachineLearning\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/demensdeum\/MachineLearning<\/a><\/p>\n<p>Links:<br \/><a href=\"https:\/\/developers.googleblog.com\/2017\/09\/introducing-tensorflow-datasets.html\" target=\"_blank\" rel=\"noopener\">https:\/\/developers.googleblog.com\/2017\/09\/introducing-tensorflow-datasets.html<\/a><br \/>\n<a href=\"https:\/\/www.tensorflow.org\/versions\/master\/api_docs\/python\/tf\/estimator\/DNNClassifier\" target=\"_blank\" rel=\"noopener\">https:\/\/www.tensorflow.org\/versions\/master\/api_docs\/python\/tf\/estimator\/DNNClassifier<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apresento a sua aten\u00e7\u00e3o um exemplo simples de como trabalhar com um framework para trabalhar com Deep Learning &#8211; TensorFlow. Neste exemplo, ensinaremos uma rede neural a detectar n\u00fameros positivos, negativos e zero. Instala\u00e7\u00e3o do TensorFlow e CUDA Eu te instruo, esta tarefa realmente n\u00e3o \u00e9 f\u00e1cil) Para resolver problemas de classifica\u00e7\u00e3o, classificadores. TensorFlow tem<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/pt\/2017\/12\/06\/simple-example-tensorflow\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Exemplo simples do TensorFlow&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[87,86],"class_list":["post-1258","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-machine-learning","tag-tensorflow","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"pt","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=1258"}],"version-history":[{"count":26,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1258\/revisions"}],"predecessor-version":[{"id":3988,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1258\/revisions\/3988"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=1258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}