TensorFlow

Primeiros passos com TensorFlow

Primeiros passos com TensorFlow
TensorFlow é o filho do cérebro do Google e, em sua essência, é uma biblioteca para computação numérica. É escrito em C / C ++ e tem uma API muito flexível. Esta API pode ter 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 de front-end para rodar em várias plataformas como GPUs Nvidia, CPUs de uso geral e até mesmo dispositivos móveis e embarcados, cada um dos quais tem uma implementação muito diferente no back-end.

O TensorFlow encontrou um uso imenso no campo do aprendizado de máquina, precisamente porque o aprendizado de máquina envolve muitos cálculos numéricos e é usado como uma técnica generalizada de resolução de problemas. E embora estejamos interagindo com ele usando Python, ele tem front-ends para outras linguagens como Go, Node.js e até mesmo C #.

Tensorflow é como uma caixa preta que esconde todas as sutilezas matemáticas dentro dela e o desenvolvedor apenas 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 uma partida de xadrez. Devido à forma como o xadrez é projetado, a maneira como as peças se movem e o objetivo bem definido do jogo, é perfeitamente possível escrever um programa que jogaria o jogo extremamente bem. Na verdade, seria mais esperto que toda a raça humana no xadrez. Ele saberia exatamente qual movimento precisa fazer, dado o estado de todas as peças no tabuleiro.

No entanto, tal programa só pode jogar xadrez. As regras do jogo estão embutidas na lógica do código e tudo o que o programa faz é executar essa lógica de forma rigorosa e mais precisa do que qualquer ser humano poderia. Não é um algoritmo de propósito geral que você pode usar para projetar qualquer bot de jogo.

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

A ideia é simples, começa por definir um problema de classificação. Por exemplo, você deseja automatizar o processo de identificação das espécies de aranhas. As espécies que você conhece são as várias classes (não deve ser confundido 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. Forneceríamos dados sobre o comprimento, largura, massa corporal e cor de aranhas individuais, juntamente com as espécies a que pertencem:

Comprimento Largura Massa Cor Textura Espécies
5 3 12 Castanho suave Papai pernas compridas
10 8 28 Marrom preto peludo Tarantula

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

O algoritmo vai começar de forma aleatória. Ou seja, toda aranha, independentemente de suas características, seria classificada como qualquer uma da espécie. Se houver 10 espécies diferentes em nosso conjunto de dados, esse algoritmo ingênuo receberia a classificação correta aproximadamente 1/10 das vezes por pura sorte.

Mas então o aspecto do aprendizado de máquina começaria a assumir. Começaria a associar certos recursos a determinado resultado. Por exemplo, aranhas peludas são provavelmente tarântulas, assim como as aranhas maiores. Assim, sempre que uma nova aranha grande e peluda aparecer, ela terá uma probabilidade maior de ser tarântula. Observe, ainda estamos trabalhando com probabilidades, porque inerentemente estamos trabalhando com um algoritmo probabilístico.

A parte de aprendizagem funciona alterando as probabilidades. Inicialmente, o algoritmo começa atribuindo aleatoriamente rótulos de 'espécie' aos indivíduos, fazendo correlações aleatórias como ser 'cabeludo' e 'ter pernas longas'. Quando faz essa correlação e o conjunto de dados de treinamento não parece concordar com isso, essa suposição é descartada.

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

TensorFlow e treinamento de seu próprio classificador de flores

O TensorFlow leva a ideia de aprendizado de máquina ainda mais longe. No exemplo acima, você foi responsável por 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 brutos para o algoritmo, podemos deixar o algoritmo encontrar padrões e entender várias coisas sobre a imagem, como reconhecer as formas na imagem e, em seguida, entender qual é a textura de diferentes superfícies, a cor , e assim por diante. Esta é a noção inicial da visão computacional e você pode usá-la para outros tipos de entradas também, como sinais de áudio e treinamento de seu algoritmo para reconhecimento de voz. Tudo isso vem sob o termo guarda-chuva de "Aprendizado profundo", em que o aprendizado de máquina é levado ao extremo lógico.

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

No exemplo abaixo, estaremos usando um Python2.7 front-end para fazer a interface com o TensorFlow e usaremos pip (não pip3) para instalar o TensorFlow. O suporte Python 3 ainda está um pouco cheio de erros.

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 bom lugar para começar por dois motivos:

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

Vamos pegar 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, então todos os comandos devem ser emitidos a partir dele, a partir de agora.

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

$ curl http: // download.tensorflow.org / example_images / flower_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 de ML
  2. Testando o programa de ML

Você pode verificar o conteúdo da pasta tf_files e aqui você descobrirá que estamos reduzindo a 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 primeiro as seguintes constantes para redimensionar todas as imagens de entrada para um tamanho padrão e usando uma arquitetura de mobilenet leve:

$ IMAGE_SIZE = 224
$ ARCHITECTURE = "mobilenet_0.50 _ $ IMAGE_SIZE "

Em seguida, invoque o script Python executando o comando:

scripts $ python -m.retreinar \
--bottleneck_dir = tf_files / bottlenecks \
--how_many_training_steps = 500 \
--model_dir = tf_files / models / \
--summaryies_dir = tf_files / training_summaries / "$ ARCHITECTURE" \
--output_graph = tf_files / retrained_graph.pb \
--output_labels = tf_files / retrained_labels.TXT \
--arquitetura = "$ ARCHITECTURE" \
--image_dir = tf_files / flower_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ções, bem como os arquivos de saída onde as informações sobre o novo modelo seriam armazenadas. Isso não deve demorar mais do que 20 minutos para funcionar em um laptop medíocre.

Assim que o script terminar o treinamento e o teste, ele fornecerá uma estimativa de precisão do modelo treinado, que em 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 cara do girassol quase não se vê 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 / Sunflower_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:

scripts $ python -m.label_image --graph = tf_files / retrained_graph.pb --
image = tf_files / unknown.jpg

Você obteria uma saída semelhante a esta:

Os números próximos ao tipo de flor representam a probabilidade de que nossa imagem desconhecida pertença a essa categoria. Por exemplo, é 98.04% de certeza 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 entrada ou tentar escrever seu próprio aplicativo diferente usando Python e TensorFlow. Se você quiser conhecer o funcionamento interno do aprendizado de máquina um pouco melhor, aqui está uma maneira interativa de fazer isso.

Como reverter a direção de rolagem do Mouse e Touchpads no Windows 10
Mouse e Touchpads não apenas torna a computação mais fácil, mas mais eficiente e menos demorada. Não podemos imaginar uma vida sem esses dispositivos,...
Como alterar o ponteiro do mouse e tamanho do cursor, cor e esquema no Windows 10
O ponteiro do mouse e o cursor no Windows 10 são aspectos muito importantes do sistema operacional. Isso também pode ser dito para outros sistemas ope...
Mecanismos de jogos gratuitos e de código aberto para o desenvolvimento de jogos Linux
Este artigo cobrirá uma lista de mecanismos de jogo gratuitos e de código aberto que podem ser usados ​​para desenvolver jogos 2D e 3D no Linux. Exist...