TensorFlow é uma biblioteca de software de código aberto para computação numérica usando grafos computacionais. Foi originalmente desenvolvido pela Google Brain Team na organização de pesquisa em Machine Intelligence do Google para aprendizado de máquina e pesquisa de redes neurais profundas (Deep Learning), mas a biblioteca é geral o suficiente para ser aplicada em uma grande variedade de outros domínios também.

Foi disponibilizado como open-source em 2015 e alcançou a versão 1.0 em Fevereiro de 2017, com um desenvolvimento e adoção incrivelmente rápidos e muitos colaboradores externos. O TensorFlow vem se tornando a biblioteca padrão para desenvolvimento em Deep Learning e aplicações de Inteligência Artificial.

Neste artigo apresentamos o TensorFlow, sua comunidade e ecossistema de software livre. Afinal, O Que é o TensorFlow Machine Intelligence Platform?

O Que é o TensorFlow Machine Intelligence Platform?

A versão open-source do TensorFlow foi liberada pelo Google em Novembro de 2015, como o resultado de anos de lições aprendidas do seu antecessor, o DistBielief. O TensorFlow foi construído para ser flexível, eficiente, extensível e portável. Computadores de qualquer natureza podem executar o TensorFlow, desde smartphones a gigantescos clusters de computadores. E uma das características mais interessantes do TensorFlow é sua capacidade de rapidamente gerar um produto ou serviço a partir do modelo preditivo treinado, eliminando a necessidade de reimplementar o modelo.

O TensorFlow é uma biblioteca inovadora e conta com uma comunidade ativa. O TensorFlow pode ser usado por indivíduos em busca de pesquisas ou mesmo grandes empresas que precisam implementar estratégias de Inteligência Artificial. O Google é um claro exemplo.

A ferramenta original de Deep Learning em larga escala do Google era o DistBelief, um produto da equipe do Google Brain. Desde a sua criação, tem sido utilizado por dezenas de equipes para inúmeros projetos envolvendo redes neurais profundas. No entanto, como ocorre com muitos projetos de engenharia de primeira classe, houve erros de projeto que limitaram a usabilidade e a flexibilidade do DistBelief.

Algum tempo após a criação do DistBelief, o Google começou a trabalhar no seu sucessor, cujo design aplicaria lições aprendidas com o uso e as limitações do DistBelief original. Este projeto transformou-se no TensorFlow, que rapidamente se tornou uma biblioteca popular para o aprendizado de máquina e está sendo usado atualmente para aplicações de Inteligência Artificial, como Processamento de Linguagem Natural, Visão Computacional e análise preditiva. O PyTorch é hoje o principal rival do TensorFlow.

O TensorFlow é multiplataforma e pode ser usado no Windows, MacOS e Linux. Ele é executado em quase tudo: CPUs e GPUs – incluindo plataformas móveis e integradas – e até mesmo Tensor Processing Units (TPUs), que são hardware especializado para executar a matemática de um tensor (um objeto matemático multidimensional).  O TensorFlow é projetado para ser escalável em vários computadores, bem como várias CPUs e GPUs dentro de máquinas individuais. Embora a implementação de código aberto original não tivesse recursos distribuídos após a liberação, a partir da versão 0.8.0 a funcionalidade de execução distribuída ficou disponível como parte da biblioteca TensorFlow. Embora esta API distribuída seja um pouco pesada, é incrivelmente poderosa. A maioria das outras bibliotecas de aprendizagem de máquina não possui esses recursos.

tensorflow

O mecanismo de execução distribuído do TensorFlow abstrai os muitos dispositivos suportados e fornece um núcleo de alto desempenho implementado em linguagem C++ para a plataforma TensorFlow.

Além disso, o TensorFlow oferece a possibilidade de desenvolvimento em Python e C++ (além de API Java, Go, R, Julia, Scala, C# e Rust). A API Layers fornece uma interface mais simples para camadas comumente usadas em modelos de aprendizagem profunda. E encontramos ainda as APIs de nível superior, incluindo Keras (mais no site Keras.io), que facilita o treinamento e a avaliação de modelos distribuídos. E, finalmente, vários modelos comumente usados estão prontos para uso.

O TensorFlow não é fácil de aprender e tem um nível de complexidade relativamente alto, mas ao mesmo tempo é flexível e poderoso, sendo atualmente o principal software para desenvolvimento em Deep Learning e aplicações de Inteligência Artificial.

Modelo de Execução do TensorFlow

O aprendizado de máquina pode se tornar complexo rapidamente e os modelos de aprendizado profundo podem se tornar grandes. Para muitos modelos, você precisa de treinamento distribuído para poder iterar dentro de um prazo razoável. E você normalmente deseja que os modelos desenvolvidos sejam implantados em várias plataformas.

Com a versão atual do TensorFlow, você escreve código para construir um grafo computacional e, em seguida, executá-lo. O grafo é uma estrutura de dados que descreve completamente a computação que você deseja executar. Isso tem muitas vantagens:

  • É portátil, já que o grafo pode ser executado imediatamente ou salvo para uso posterior, e pode ser executado em várias plataformas: CPUs, GPUs, TPUs, assim como dispositivos móveis e embarcados. Além disso, ele pode ser implementado em produção sem depender de nenhum código que criou o grafo.
  • É transformável e otimizável, pois o grafo pode ser transformado para produzir uma versão mais otimizada para uma determinada plataforma. Além disso, otimizações de memória ou computação podem ser realizadas e compensações feitas entre elas. Isso é útil, por exemplo, no suporte à inferência móvel mais rápida após o treinamento em máquinas maiores.
  • Suporte para execução distribuída.
  • As APIs de alto nível do TensorFlow, em conjunto com os grafos computacionais, permitem um ambiente de desenvolvimento rico e flexível e poderosos recursos de produção no mesmo framework.

TensorFlow e a Comunidade de Software de Código Aberto

O TensorFlow foi aberto a comunidade open-source para permitir contribuições que aprimorassem a bilioteca. A equipe do TensorFlow configurou processos para gerenciar solicitações de extração, revisar e rotear os problemas e responder às perguntas do StackOverflow. Ou seja, o Google monitora o avanço e desenvolvimento do TensorFlow.

O TensorFlow tem mais milhares de estrelas no GitHub, e o número de outros repositórios que o usam cresce a cada mês. O StackOverflow é monitorado pela equipe do TensorFlow, e é uma boa maneira de obter respostas às perguntas.

A versão externa (open-source) do TensorFlow não é diferente da versão interna (exclusiva do Google), além de algumas pequenas diferenças. Isso inclui a interface com a infraestrutura interna do Google (não ajudaria ninguém), alguns caminhos e peças que ainda não estão prontas. O núcleo do TensorFlow, no entanto, é idêntico. 

No repositório Github do TensorFlow, você pode encontrar não apenas o TensorFlow em si, mas também um ecossistema útil de outros repos, incluindo modelos, serviços, TensorBoard, Project Magenta e muitos outros. Você também pode encontrar APIs do TensorFlow em várias linguagens (Python, C ++, Java e Go) e a comunidade desenvolveu outras extensões, incluindo C#, Haskell, Julia, Ruby, Rust e Scala.

Desempenho e Benchmarking

O TensorFlow possui altos padrões de medição e transparência. A equipe desenvolveu um conjunto de benchmarks detalhados e foi muito cuidadosa para incluir todos os detalhes necessários para a reprodução. 

Há uma seção do site do TensorFlow com informações específicas para desenvolvedores como foco no desempenho. A otimização muitas vezes pode ser específica do modelo, mas existem algumas diretrizes gerais que podem, com frequência, fazer uma grande diferença.

Modelos Open Source do TensorFlow

A equipe do TensorFlow disponibiliza um grande número de modelos. Você pode encontrá-los no repositório tensorflow/models. Para muitos deles, o código liberado inclui não apenas o grafo computacional do modelo, mas também pesos de modelos treinados. Isso significa que você pode experimentar esses modelos prontos para uso e pode ajustar muitos deles usando um processo chamado transferência de aprendizado. Nota: se os termos citados neste parágrafo não soam familiar a você, recomendamos a leitura do Deep Learning Book, em português, online e gratuito.

Aqui estão apenas alguns dos modelos (há muitos mais):

API de detecção de objetos: ainda é um desafio central do aprendizado de máquina criar modelos precisos capazes de localizar e identificar vários objetos em uma única imagem. A API de detecção de objetos TensorFlow produziu resultados de última geração no desafio de detecção COCO

O Que é o TensorFlow Machine Intelligence Platform

tf-seq2seq: O Google oferece o Google Neural Machine Translation (GNMT), um modelo sequencial para sequência (seq2seq) que é usado nos sistemas de produção do Google Translate. O tf-seq2seq é um framework seq2seq de código aberto do TensorFlow que facilita a experimentação com modelos seq2seq e a obtenção de resultados de última geração. 

ParseySaurus é um conjunto de modelos pré-concebidos que refletem uma atualização para o SyntaxNet. Os novos modelos usam uma representação de entrada baseada em caracteres e são muito melhores em prever o significado de novas palavras com base em sua ortografia e em como elas são usadas no contexto. Eles são muito mais precisos que seus predecessores, particularmente para idiomas onde pode haver dezenas de formas para cada palavra e muitas dessas formas nunca podem ser observadas durante o treinamento, mesmo em um corpus muito grande.

Multistyle Pastiche Generator do Projeto Magenta: “Transferência de estilo” é o que está acontecendo sob o capô com aqueles aplicativos divertidos que aplicam o estilo de uma pintura a uma de suas fotos. Este modelo Magenta amplia a transferência de estilo de imagem criando uma única rede que pode executar mais de uma estilização de uma imagem, opcionalmente ao mesmo tempo.

Transferência de Aprendizado

Muitos dos modelos do TensorFlow incluem pesos treinados e exemplos que mostram como você pode usá-los para a transferência de aprendizado, por exemplo, para aprender suas próprias classificações. Normalmente, você faz isso derivando informações sobre os dados de entrada da penúltima camada de um modelo treinado – que codifica abstrações úteis – e usa isso como entrada para treinar sua própria rede neural muito menor para prever suas próprias classes. Devido ao poder das abstrações aprendidas, o treinamento adicional normalmente não requer grandes conjuntos de dados. Ensinamos sobre isso na Formação Engenheiro de IA.

Por exemplo, você pode usar a transferência de aprendizado com o modelo de classificação de imagem Inception para treinar um classificador de imagem que usa seus dados de imagem especializados.

O código da API de detecção de objeto é projetado para suportar também a transferência de aprendizado. No repositório tensorflow/models, há um exemplo de como você pode usar a transferência de aprendizado para inicializar esse modelo treinado para construir um detector de animal de estimação, usando um conjunto de dados (um tanto limitado) de exemplos de cães e gatos.

tensorflow

Usando o TensorFlow em Dispositivos Móveis

O celular é um ótimo caso de uso para o TensorFlow – o celular faz sentido quando há uma conexão de rede deficiente ou ausente ou o envio de dados contínuos para um servidor seria muito caro. Mas, depois de treinar seu modelo e estar pronto para começar a usá-lo, você não quer que o tamanho do modelo no dispositivo seja grande demais.

Um dos projetos do TensorFlow, o MobileNet, está desenvolvendo um conjunto de modelos de Visão Computacional que são especialmente projetados para abordar os trade-offs de velocidade/precisão que precisam ser considerados em dispositivos móveis ou em aplicativos embarcados. Os modelos MobileNet podem ser encontrados no repo de modelos TensorFlow também.

Uma das demos do Android, o TF Detect, usa um modelo da MobileNet treinado usando a API Tensorflow Object Detection.

tensorflow

E é claro que seríamos negligentes em não mencionar como a série Silicon Valley da HBO construiu ‘Not Hotdog’ com os dispositivos móveis TensorFlow, Keras e React Native. Se não faz ideia do que é isso, leia este artigo e depois assista a série da HBO.

O Ecossistema TensorFlow

O ecossistema TensorFlow inclui muitas ferramentas e bibliotecas para ajudá-lo a trabalhar com mais eficiência. Aqui estão algumas.

TensorBoard

O TensorBoard é um conjunto de aplicativos web para inspeção, visualização e compreensão de suas execuções e grafos do TensorFlow. Você pode usar o TensorBoard para visualizar seus grafos de modelo do TensorFlow e ampliar os detalhes das subseções gráficas.

Você pode plotar métricas como erro e precisão durante uma execução de treinamento e visualizar o histograma de como um tensor está mudando ao longo do tempo. O TensorBoard pode mostrar dados adicionais, como imagens, coletar metadados de tempo de execução para uma execução, como uso total de memória e formas de tensor e muito mais.

mnist_tensorboard

O TensorBoard funciona lendo arquivos do TensorFlow que contêm informações resumidas sobre o processo de treinamento. Você pode gerar esses arquivos ao executar jobs do TensorFlow.

Você pode usar o TensorBoard para comparar execuções de treinamento, coletar estatísticas de tempo de execução e gerar histogramas.

tensorflow

Uma característica particularmente fascinante do TensorBoard é seu visualizador de embeddings

Facets

O poder do aprendizado de máquina vem de sua capacidade de aprender padrões a partir de grandes quantidades de dados, portanto, entender seus dados pode ser fundamental para a criação de um sistema poderoso de aprendizado de máquina.

Facets é uma ferramenta de visualização de dados de código aberto que ajuda você a entender seus conjuntos de dados de aprendizado de máquina e ter uma noção da forma e características de cada recurso e ver rapidamente como os recursos interagem entre si. Por exemplo, você pode visualizar seu treinamento e testar conjuntos de dados (como é feito aqui com alguns dados do Censo), comparar as características de cada recurso e classificar os recursos por “distância de distribuição”.

tensorflow

Esse link do GitHub tem um pequeno exemplo de como carregar um conjunto de dados público do NHTSA Traffic Fatality BigQuery e visualizá-lo com o Facets.

tensorflow

Na visão do Facets, podemos ver rapidamente quais estados têm mais fatalidades no tráfego e que a distribuição do tipo de colisão parece mudar à medida que o número de fatalidades por acidente aumenta.

E mais…

Outra ferramenta de diagnóstico útil é o depurador TensorFlow, tfdbg, que permite visualizar a estrutura interna e os estados de execução dos grafos do TensorFlow durante o treinamento e a inferência.

Uma vez que você tenha treinado um modelo com o qual você esteja satisfeito, o próximo passo é descobrir como você o servirá para poder suportar previsões sobre o modelo. O TensorFlow Serving é um sistema de atendimento de alto desempenho para modelos de Machine Learning, projetado para ambientes de produção. 

Existem muitas outras ferramentas e bibliotecas que não temos espaço para abranger aqui, mas veja os repositórios do TensorFlow no GitHub para aprender sobre eles.

Onde Aprender TensorFlow

Na Data Science Academy o TensorFlow é estudado em diversos projetos e estudos de caso da Formação Engenheiro de IA.

Há também um exemplo completo no Curso Gratuito Fundamentos de Linguagem Python Para Análise de Dados e Data Science.

Equipe DSA

Referências:

TensorFlow

What is the TensorFlow machine intelligence platform?

Build and train machine learning models on our new Google Cloud TPUs

Big Data + Deep Learning = Google TensorFlow