O que é TensorFlow? Como funciona? Introdução & Archiarquitetura

Vamos começar este tutorial com a introdução do TensorFlow:

O que é TensorFlow?

TensorFlow é uma plataforma ponta a ponta de código aberto para a criação de aplicativos de aprendizado de máquina. É uma biblioteca matemática simbólica que utiliza fluxo de dados e programação diferenciável para realizar diversas tarefas focadas no treinamento e inferência de redes neurais profundas. Ele permite que os desenvolvedores criem aplicativos de aprendizado de máquina usando várias ferramentas, bibliotecas e recursos da comunidade.

Atualmente, a biblioteca de aprendizagem profunda mais famosa do mundo é o TensorFlow do Google. O produto Google usa aprendizado de máquina em todos os seus produtos para melhorar o mecanismo de pesquisa, tradução, legenda de imagens ou recomendações.

Exemplo de TensorFlow

Para dar um exemplo concreto, os usuários do Google podem experimentar uma experiência de pesquisa mais rápida e refinada com IA. Se o usuário digitar uma palavra-chave na barra de pesquisa, o Google fornecerá uma recomendação sobre qual poderia ser a próxima palavra.

Exemplo de TensorFlow
Exemplo de TensorFlow

O Google deseja usar o aprendizado de máquina para aproveitar seus enormes conjuntos de dados e oferecer aos usuários a melhor experiência. Três grupos diferentes usam aprendizado de máquina:

  • Pesquisadores
  • Cientistas de Dados
  • Programadores

Todos eles podem usar o mesmo conjunto de ferramentas para colaborar entre si e melhorar sua eficiência.

O Google não possui apenas dados; eles têm o computador mais massivo do mundo, então o Tensor Flow foi construído em escala. TensorFlow é uma biblioteca desenvolvida pela equipe do Google Brain para acelerar o aprendizado de máquina e a pesquisa profunda de redes neurais.

Ele foi criado para rodar em múltiplas CPUs ou GPUs e até mesmo em sistemas operacionais móveis, e possui vários wrappers em diversas linguagens como Python, C++ or Java.

História do TensorFlow

Há alguns anos, o aprendizado profundo começou a superar todos os outros algoritmos de aprendizado de máquina ao fornecer uma grande quantidade de dados. O Google percebeu que poderia usar essas redes neurais profundas para melhorar seus serviços:

  • Gmail
  • Ensaio
  • Mecanismo de pesquisa do Google

Eles constroem uma estrutura chamada Tensorflow para permitir que pesquisadores e desenvolvedores trabalhem juntos em um modelo de IA. Uma vez desenvolvido e dimensionado, ele permite que muitas pessoas o utilizem.

Foi tornado público pela primeira vez no final de 2015, enquanto a primeira versão estável apareceu em 2017. É de código aberto sob a licença Apache Open Source. Você pode usá-lo, modificá-lo e redistribuir a versão modificada mediante o pagamento de uma taxa, sem pagar nada ao Google.

A seguir, neste tutorial de aprendizado profundo do TensorFlow, aprenderemos sobre a arquitetura do TensorFlow e como o TensorFlow funciona.

Como funciona o TensorFlow

O TensorFlow permite criar gráficos e estruturas de fluxo de dados para definir como os dados se movem por um gráfico, considerando as entradas como uma matriz multidimensional chamada Tensor. Ele permite construir um fluxograma de operações que podem ser realizadas nessas entradas, que vai em uma ponta e chega na outra como saída.

TensorFlow Archiarquitetura

A arquitetura Tensorflow funciona em três partes:

  • Pré-processando os dados
  • Construa o modelo
  • Treine e estime o modelo

É chamado Tensorflow porque recebe a entrada como uma matriz multidimensional, também conhecida como tensores. Você pode construir uma espécie de fluxograma de operações (chamadas de Gráfico) que você deseja realizar nessa entrada. A entrada entra por uma extremidade e depois flui através desse sistema de múltiplas operações e sai pela outra extremidade como saída.

É por isso que é chamado de TensorFlow porque o tensor entra, flui por uma lista de operações e depois sai do outro lado.

Onde o Tensorflow pode ser executado?

Hardware TensorFlow e requisitos de software pode ser classificado em

Fase de Desenvolvimento: É quando você treina o modo. O treinamento geralmente é feito em seu desktop ou laptop.

Fase de execução ou fase de inferência: após a conclusão do treinamento, o Tensorflow pode ser executado em muitas plataformas diferentes. Você pode executá-lo

  • Área de trabalho em execução Windows, macOS ou Linux
  • Nuvem como serviço web
  • Dispositivos móveis como iOS e Android

Você pode treiná-lo em várias máquinas e executá-lo em uma máquina diferente, depois de ter o modelo treinado.

O modelo pode ser treinado e usado em GPUs e CPUs. As GPUs foram projetadas inicialmente para videogames. No final de 2010, pesquisadores de Stanford descobriram que a GPU também era muito boa em operações de matriz e álgebra, o que as torna muito rápidas para fazer esses tipos de cálculos. O aprendizado profundo depende de muita multiplicação de matrizes. O TensorFlow é muito rápido em calcular a multiplicação de matrizes porque é escrito em C++. Embora seja implementado em C++, o TensorFlow pode ser acessado e controlado principalmente por outras linguagens, Python.

Finalmente, um recurso significativo do TensorFlow é o TensorBoard. O TensorBoard permite monitorar gráfica e visualmente o que o TensorFlow está fazendo.

Componentes do TensorFlow

tensor

O nome do Tensorflow deriva diretamente de sua estrutura principal: tensor. No Tensorflow, todos os cálculos envolvem tensores. Um tensor é um vetor or matriz de n dimensões que representa todos os tipos de dados. Todos os valores em um tensor contêm tipo de dados idêntico a um conhecido (ou parcialmente conhecido) forma. A forma dos dados é a dimensionalidade da matriz ou array.

Um tensor pode ser originado dos dados de entrada ou do resultado de um cálculo. No TensorFlow, todas as operações são conduzidas dentro de um gráfico. O gráfico é um conjunto de cálculos que ocorrem sucessivamente. Cada operação é chamada de nó operacional e estão conectados entre si.

O gráfico descreve as operações e conexões entre os nós. No entanto, ele não exibe os valores. A borda dos nós é o tensor, ou seja, uma forma de preencher a operação com dados.

Gráficos

O TensorFlow faz uso de uma estrutura gráfica. O gráfico reúne e descreve todos os cálculos das séries feitos durante o treinamento. O gráfico tem muitas vantagens:

  • Foi feito para rodar em múltiplas CPUs ou GPUs e até mesmo em sistemas operacionais móveis
  • A portabilidade do gráfico permite preservar os cálculos para uso imediato ou posterior. O gráfico pode ser salvo para ser executado no futuro.
  • Todos os cálculos no gráfico são feitos conectando tensores entre si
    • Um tensor possui um nó e uma aresta. O nó realiza a operação matemática e produz saídas de terminais. As arestas explicam as relações de entrada/saída entre os nós.

Por que o TensorFlow é popular?

TensorFlow é a melhor biblioteca de todas porque foi desenvolvida para ser acessível a todos. A biblioteca Tensorflow incorpora diferentes APIs para construir arquitetura de aprendizado profundo em escala, como CNN ou RNN. O TensorFlow é baseado na computação gráfica; permite ao desenvolvedor visualizar a construção da rede neural com Tensorboad. Esta ferramenta é útil para depurar o programa. Por fim, o Tensorflow foi desenvolvido para ser implantado em escala. Ele roda em CPU e GPU.

O Tensorflow atrai a maior popularidade no GitHub em comparação com outras estruturas de aprendizado profundo.

TensorFlow Algorithms

Abaixo estão os algoritmos suportados pelo TensorFlow:

Atualmente, o TensorFlow 1.10 possui uma API integrada para:

  • Regressão linear: tf.estimator.LinearRegressor
  • Classificação:tf.estimator.LinearClassifier
  • Classificação de aprendizagem profunda: tf.estimator.DNNClassifier
  • Limpeza profunda e profunda de aprendizado: tf.estimator.DNNLinearCombinedClassifier
  • Regressão da árvore de reforço: tf.estimator.BoostedTreesRegressor
  • Classificação de árvore otimizada: tf.estimator.BoostedTreesClassifier

Como funcionam os cálculos no TensorFlow

import numpy as np
import tensorflow as tf

Nas duas primeiras linhas de código, importamos tensorflow como tf. Com Python, é uma prática comum usar um nome abreviado para uma biblioteca. A vantagem é evitar digitar o nome completo da biblioteca quando precisarmos utilizá-la. Por exemplo, podemos importar tensorflow como tf e chamar tf quando quisermos usar uma função tensorflow

Vamos praticar o fluxo de trabalho elementar do Tensorflow com exemplos simples do TensorFlow. Vamos criar um gráfico computacional que multiplica dois números.

Durante o exemplo, multiplicaremos X_1 e X_2 juntos. O Tensorflow criará um nó para conectar a operação. Em nosso exemplo, é chamado de multiplicação. Quando o gráfico for determinado, os mecanismos computacionais do Tensorflow multiplicarão X_1 e X_2.

Os cálculos funcionam no TensorFlow
Exemplo de TensorFlow

Por fim, executaremos uma sessão do TensorFlow que executará o gráfico computacional com os valores de X_1 e X_2 e imprimirá o resultado da multiplicação.

Vamos definir os nós de entrada X_1 e X_2. Quando criamos um nó no Tensorflow, temos que escolher que tipo de nó criar. Os nós X1 e X2 serão um nó de espaço reservado. O espaço reservado atribui um novo valor cada vez que fazemos um cálculo. Iremos criá-los como um nó de espaço reservado TF.

Etapa 1: definir a variável

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

Quando criamos um nó de espaço reservado, temos que passar o tipo de dados que adicionaremos números aqui para que possamos usar um tipo de dados de ponto flutuante, vamos usar tf.float32. Também precisamos dar um nome a este nó. Este nome aparecerá quando olharmos as visualizações gráficas do nosso modelo. Vamos nomear este nó X_1 passando um parâmetro chamado name com valor X_1 e agora vamos definir X_2 da mesma forma. X_2.

Etapa 2: definir o cálculo

multiply = tf.multiply(X_1, X_2, name = "multiply")

Agora podemos definir o nó que faz a operação de multiplicação. No Tensorflow podemos fazer isso criando um nó tf.multiply.

Passaremos os nós X_1 e X_2 para o nó de multiplicação. Ele diz ao tensorflow para vincular esses nós no gráfico computacional, então estamos pedindo para ele extrair os valores de xey e multiplicar o resultado. Vamos também dar ao nó de multiplicação o nome de multiplicação. É a definição completa do nosso gráfico computacional simples.

Passo 3: Execute a operação

Para executar operações no gráfico, temos que criar uma sessão. No Tensorflow, isso é feito por tf.Session(). Agora que temos uma sessão, podemos solicitar que ela execute operações em nosso gráfico computacional chamando session. Para executar o cálculo, precisamos usar run.

Quando a operação de adição for executada, ela verá que precisa capturar os valores dos nós X_1 e X_2, portanto, também precisamos alimentar valores para X_1 e X_2. Podemos fazer isso fornecendo um parâmetro chamado feed_dict. Passamos o valor 1,2,3 para X_1 e 4,5,6 para X_2.

Imprimimos os resultados com print(result). Devemos ver 4, 10 e 18 para 1×4, 2×5 e 3×6

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

multiply = tf.multiply(X_1, X_2, name = "multiply")

with tf.Session() as session:
    result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
    print(result)
[ 4. 10. 18.]

Opções para carregar dados no TensorFlow

O primeiro passo antes de treinar um algoritmo de aprendizado de máquina é carregar os dados. Existem duas maneiras comuns de carregar dados:

1. Carregar dados na memória: É o método mais simples. Você carrega todos os seus dados na memória como um único array. Você pode escrever um Python código. Essas linhas de código não estão relacionadas ao Tensorflow.

2. Pipeline de dados do Tensorflow: Tensorflow possui API integrada que ajuda você a carregar os dados, executar a operação e alimentar o algoritmo de aprendizado de máquina facilmente. Este método funciona muito bem, especialmente quando você tem um grande conjunto de dados. Por exemplo, sabe-se que os registros de imagens são enormes e não cabem na memória. O pipeline de dados gerencia a memória sozinho

Qual solução usar?

Carregar dados na memória

Se o seu conjunto de dados não for muito grande, ou seja, menos de 10 gigabytes, você poderá usar o primeiro método. Os dados podem caber na memória. Você pode usar uma biblioteca famosa chamada Pandas para importar arquivos CSV. Você aprenderá mais sobre pandas no próximo tutorial.

Carregar dados com pipeline do Tensorflow

O segundo método funciona melhor se você tiver um grande conjunto de dados. Por exemplo, se você tiver um conjunto de dados de 50 gigabytes e seu computador tiver apenas 16 gigabytes de memória, a máquina irá travar.

Nessa situação, você precisa construir um pipeline do Tensorflow. O pipeline carregará os dados em lote ou em pequenos pedaços. Cada lote será enviado ao pipeline e estará pronto para o treinamento. Construir um pipeline é uma excelente solução porque permite usar computação paralela. Isso significa que o Tensorflow treinará o modelo em várias CPUs. Ele promove a computação e permite o treinamento de redes neurais poderosas.

Você verá nos próximos tutoriais como construir um pipeline significativo para alimentar sua rede neural.

Resumindo, se você tiver um conjunto de dados pequeno, poderá carregar os dados na memória com a biblioteca Pandas.

Se você tiver um grande conjunto de dados e quiser usar várias CPUs, ficará mais confortável trabalhando com o pipeline do Tensorflow.

Como criar um pipeline do TensorFlow

Aqui estão as etapas para criar um pipeline do TensorFlow:

No exemplo anterior, adicionamos manualmente três valores para X_1 e X_2. Agora, veremos como carregar dados no Tensorflow:

Etapa 1) Crie os dados

Primeiro de tudo, vamos usar a biblioteca numpy para gerar dois valores aleatórios.

import numpy as np
x_input = np.random.sample((1,2))
print(x_input)

[[0.8835775 0.23766977]]

Etapa 2) Crie o espaço reservado

Como no exemplo anterior, criamos um espaço reservado com o nome X. Precisamos especificar explicitamente a forma do tensor. Nesse caso, carregaremos um array com apenas dois valores. Podemos escrever a forma como shape=[1,2]

# using a placeholder
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')

Etapa 3) Definir o método do conjunto de dados

A seguir, precisamos definir o Dataset onde podemos preencher o valor do espaço reservado x. Precisamos usar o método tf.data.Dataset.from_tensor_slices

dataset = tf.data.Dataset.from_tensor_slices(x)

Etapa 4) Crie o pipeline

Na etapa quatro, precisamos inicializar o pipeline por onde os dados fluirão. Precisamos criar um iterador com make_initializable_iterator. Nós o chamamos de iterador. Então precisamos chamar esse iterador para alimentar o próximo lote de dados, get_next. Chamamos esta etapa de get_next. Observe que em nosso exemplo, há apenas um lote de dados com apenas dois valores.

iterator = dataset.make_initializable_iterator() 
get_next = iterator.get_next()

Etapa 5) Execute a operação

A última etapa é semelhante ao exemplo anterior. Iniciamos uma sessão e executamos o iterador de operação. Alimentamos o feed_dict com o valor gerado por numpy. Esses dois valores preencherão o espaço reservado x. Então executamos get_next para imprimir o resultado.

with tf.Session() as sess:
    # feed the placeholder with data
    sess.run(iterator.initializer, feed_dict={ x: x_input }) 
    print(sess.run(get_next)) # output [ 0.52374458  0.71968478]
[0.8835775  0.23766978]

Resumo

  • Significado do Tensor Flow: TensorFlow é a biblioteca de aprendizagem profunda mais famosa dos últimos anos. Um profissional que usa o TensorFlow pode construir qualquer estrutura de aprendizado profundo, como CNN, RNN ou uma rede neural artificial simples.
  • O TensorFlow é usado principalmente por acadêmicos, startups e grandes empresas. O Google usa o TensorFlow em quase todos os produtos diários do Google, incluindo Gmail, Photo e Google Search Engine.
  • A equipe do Google Brain desenvolveu o TensorFlow para preencher a lacuna entre pesquisadores e desenvolvedores de produtos. Em 2015, eles tornaram o TensorFlow público; sua popularidade está crescendo rapidamente. Hoje em dia, o TensorFlow é a biblioteca de aprendizagem profunda com mais repositórios no GitHub.
  • Os profissionais usam o Tensorflow porque é fácil de implantar em escala. Ele foi desenvolvido para funcionar na nuvem ou em dispositivos móveis como iOS e Android.

Tensorflow funciona em uma sessão. Cada sessão é definida por um gráfico com cálculos diferentes. Um exemplo simples pode ser multiplicar por número. No Tensorflow, três etapas são necessárias:

  1. Defina a variável
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. Defina o cálculo
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. Execute a operação
with tf.Session() as session:
result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
print(result)

Uma prática comum no Tensorflow é criar um pipeline para carregar os dados. Se você seguir estas cinco etapas, poderá carregar dados no TensorFLow:

  1. Crie os dados
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. Crie o espaço reservado
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. Definir o método do conjunto de dados
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. Criar o pipeline
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. Execute o programa
with tf.Session() as sess:  
sess.run(iterator.initializer, feed_dict={ x: x_input })  
print(sess.run(get_next))