Introdução ao Tensorflow

Introdução ao Tensorflow
O TensorFlow é o Brain Child do Google e, em sua essência, é uma biblioteca para computação numérica. Está escrito em C/C ++ e tem uma API muito flexível. Esta API pode ser interface com um front-end Python para que você possa escrever pequenos trechos de código Python para resolver problemas complicados. Uma API flexível e consistente também permite que os desenvolvedores usem o mesmo código front-end para executar em várias plataformas, como NVIDIA GPUs, CPUs de uso geral e até dispositivos móveis e incorporados, cada um dos quais tem uma implementação muito diferente no back-end.

O Tensorflow encontrou um imenso uso no campo do aprendizado de máquina, precisamente porque o aprendizado de máquina envolve muito otimista e é usado como uma técnica de resolução de problemas generalizada. E embora estejamos interagindo com ele usando Python, ele tem front-ends para outros idiomas como ir, nó.JS e até C#.

O Tensorflow é como uma caixa preta que esconde todas as sutilezas matemáticas dentro dela e o desenvolvedor chama as funções certas para resolver um problema. Mas que problema?

Aprendizado de máquina (ML)

Suponha que você esteja projetando um bot para jogar um jogo de xadrez. Devido à maneira como o xadrez é projetado, a maneira como as peças se movem e o objetivo bem definido do jogo, é bem possível escrever um programa que jogaria o jogo extremamente bem. De fato, enganaria toda a raça humana em xadrez. Saberia exatamente qual movimento ele precisa fazer, dado o estado de todas as peças no quadro.

No entanto, esse programa só pode jogar xadrez. As regras do jogo são assadas na lógica do código e tudo o que o programa faz é executar que lógica rigorosamente e mais precisão do que qualquer humano poderia. Não é um algoritmo de uso geral que você pode usar para projetar qualquer bot de jogo.

Com o aprendizado de máquina, as mudanças de paradigma e os algoritmos se tornam cada vez mais fins de uso geral.

A ideia é simples, começa definindo um problema de classificação. Por exemplo, você deseja automatizar o processo de identificação das espécies de aranhas. As espécies que são conhecidas por você são as várias classes (que não devem ser confundidas com classes taxonômicas) e o objetivo do algoritmo é classificar uma nova imagem desconhecida em uma dessas classes.

Aqui, o primeiro passo para o humano seria determinar as características de várias aranhas individuais. Fornecemos dados sobre o comprimento, largura, massa corporal e cor de aranhas individuais, juntamente com as espécies às quais pertencem:

Comprimento Largura Massa Cor Textura Espécies
5 3 12 Marrom suave Papai pernas longas
10 8 28 Marrom preto peludo Tarântula

Ter uma grande coleção desses dados de aranha individual será usada para 'treinar' o algoritmo e outro conjunto de dados semelhante será usado para testar o algoritmo para ver como ele se sai contra novas informações que nunca encontrou antes, mas que já sabemos responda para.

O algoritmo começará de uma maneira randomizada. Ou seja, toda aranha, independentemente de seus recursos, seria classificada como qualquer pessoa da espécie. Se houver 10 espécies diferentes em nosso conjunto de dados, esse algoritmo ingênuo receberá a classificação correta aproximadamente 1/10 do tempo por causa da pura ereca.

Mas então o aspecto de aprendizado de máquina começaria a assumir o controle. Começaria a associar certos recursos a determinados resultados. Por exemplo, é provável que as aranhas peludas sejam tarântulas, e as aranhas maiores são. Então, sempre que uma nova aranha que é grande e peluda aparece, será atribuída uma maior probabilidade de ser tarântula. Observe que ainda estamos trabalhando com probabilidades, isso ocorre porque estamos trabalhando inerentemente com um algoritmo probabilístico.

A parte do aprendizado funciona alterando as probabilidades. Inicialmente, o algoritmo começa atribuindo aleatoriamente uma 'espécie' rótulos a indivíduos fazendo correlações aleatórias como, sendo 'peluda' e sendo 'Daddy Long Legs'. Quando faz essa correlação e o conjunto de dados de treinamento não parece concordar com ele, essa suposição é descartada.

Da mesma forma, quando uma correlação funciona bem através de vários exemplos, fica mais forte a cada vez. Esse método de tropeçar em relação à verdade é notavelmente eficaz, graças a muitas sutilezas matemáticas que, como iniciante, você não gostaria de se preocupar com.

Tensorflow e treinando seu próprio classificador de flores

Tensorflow leva a ideia de aprendizado de máquina ainda mais. No exemplo acima, você estava encarregado de determinar as características que distinguem uma espécie de aranha de outra. Tivemos que medir aranhas individuais meticulosamente e criar centenas desses registros.

Mas podemos fazer melhor, fornecendo apenas dados de imagem bruta ao algoritmo, podemos deixar o algoritmo encontrar padrões e entender várias coisas sobre a imagem como reconhecer as formas na imagem e depois entender qual é a textura de diferentes superfícies, a cor da cor , e assim por diante. Esta é a noção inicial de visão computacional e você também pode usá -la para outros tipos de entradas, como sinais de áudio e treinando seu algoritmo para reconhecimento de voz. Tudo isso está sob o termo guarda -chuva de 'aprendizado profundo', onde o aprendizado de máquina é levado ao seu extremo lógico.

Este conjunto generalizado de noções pode ser especializado ao lidar com muitas imagens de flores e categorizá -las.

No exemplo abaixo, usaremos um python2.7 front-end para interface com o tensorflow e usaremos PIP (não PIP3) para instalar o Tensorflow. O suporte do Python 3 ainda é um pequeno buggy.

Para fazer seu próprio classificador de imagem, usando o tensorflow primeiro, vamos instalá -lo usando pip:

$ pip install tensorflow

Em seguida, precisamos clonar o Tensorflow-for Poets-2 Repositório Git. Este é um lugar muito bom para começar por dois motivos:

  1. É simples e fácil de usar
  2. Vem pré-treinado até certo ponto. Por exemplo, o classificador de flores já está treinado para entender qual textura está olhando e quais formas está olhando para que seja computacionalmente menos intensivo.

Vamos obter o repositório:

$ git clone https: // github.com/googlecodelabs/tensorflow-for poets-2
$ CD Tensorflow-for Poets-2

Este será o nosso diretório de trabalho, para que todos os comandos sejam emitidos a partir dele, a partir de agora.

Ainda precisamos treinar o algoritmo para o problema específico de reconhecer flores, pois precisamos de dados de treinamento, então vamos conseguir isso:

$ curl http: // download.tensorflow.org/exemplo_images/flor_photos.TGZ
| Tar xz -c tf_files

O diretório… ./tensorflow-for poets-2/tf_files contém uma tonelada dessas imagens devidamente rotuladas e prontas para serem usadas. As imagens serão para dois propósitos diferentes:

  1. Treinando o programa ML
  2. Testando o programa ML

Você pode verificar o conteúdo da pasta tf_files E aqui você descobrirá que estamos diminuindo para apenas 5 categorias de flores, ou seja, margaridas, tulipas, girassóis, dente de leão e rosas.

Treinando o modelo

Você pode iniciar o processo de treinamento, configurando as seguintes constantes para redimensionar todas as imagens de entrada em um tamanho padrão e usando uma arquitetura leve do MobileNet:

$ Image_size = 224
$ Arquitetura = "mobileNet_0.50 _ $ image_size "

Em seguida, invocar o script python executando o comando:

$ python -m scripts.RETRAIN \
--Bottleneck_dir = tf_files/gargalheks \
--How_Many_Trening_Steps = 500 \
--model_dir = tf_files/ modelos/ \
--resumos_dir = tf_files/Training_summaries/"$ arquitetura" \
--output_graph = tf_files/retrailted_graph.pb \
--output_labels = tf_files/retrailted_labels.TXT \
--arquitetura = "$ arquitetura" \
--image_dir = tf_files/flor_photos

Embora existam muitas opções especificadas aqui, a maioria delas especifica seus diretórios de dados de entrada e o número de iteração, bem como os arquivos de saída onde as informações sobre o novo modelo seriam armazenadas. Isso não deve levar mais de 20 minutos para correr em um laptop medíocre.

Depois que o script terminar o treinamento e o teste, ele fornecerá uma estimativa de precisão do modelo treinado, que no nosso caso foi ligeiramente superior a 90%.

Usando o modelo treinado

Agora você está pronto para usar este modelo para o reconhecimento de imagem de qualquer nova imagem de uma flor. Estaremos usando esta imagem:

A face do girassol é pouco visível e este é um grande desafio para o nosso modelo:

Para obter esta imagem do Wikimedia Commons, use o WGET:

$ wget https: // upload.Wikimedia.org/wikipedia/Commons/2/28/gunflower_head_2011_g1.jpg
$ MV Sunflower_Head_2011_G1.jpg tf_files/desconhecido.jpg

É salvo como desconhecido.jpg debaixo de tf_files subdiretório.

Agora, no momento da verdade, veremos o que nosso modelo tem a dizer sobre esta imagem.Para fazer isso, invocamos o LABEL_IMAGE roteiro:

$ python -m scripts.LABEL_IMAGE --GRAPH = TF_FILES/RETRIENH_GRAPH.PB --
imagem = tf_files/desconhecido.jpg

Você obteria uma saída semelhante a isso:

Os números próximos ao tipo de flor representam a probabilidade de que nossa imagem desconhecida pertence a essa categoria. Por exemplo, é 98.04% certo de que a imagem é de um girassol e é apenas 1.37% de chance de ser uma rosa.

Conclusão

Mesmo com recursos computacionais muito medíocres, estamos vendo uma precisão impressionante na identificação de imagens. Isso demonstra claramente o poder e a flexibilidade do tensorflow.

A partir daqui, você pode começar a experimentar vários outros tipos de insumos ou tentar começar a escrever seu próprio aplicativo diferente usando Python e Tensorflow. Se você quiser saber o trabalho interno do aprendizado de máquina um pouco melhor aqui é uma maneira interativa de você fazê -lo.