Copyright 2020 The TensorFlow Authors.
Noções básicas do TensorFlow
Este guia fornece uma visão geral rápida dos princípios básicos do TensorFlow. Cada seção deste documento é uma visão geral de um tópico maior. Você encontrará links para guias completos no final de cada seção.
TensorFlow é uma plataforma de ponta a ponta para aprendizado de máquina. Ela suporta os seguintes recursos:
Computação numérica baseada em matriz multidimensional (similar a NumPy.)
GPU e processamento distribuido
Diferenciação automática
Construção de modelo, treinamento e exportação
E mais
Tensores
O TensorFlow opera em matizes multidimensionais ou tensores representados como objetos tf.Tensor
. Aqui está um tensor bidimensional:
Os atributos mais importantes de um tf.Tensor
são seus shape
(formato) e dtype
:
Tensor.shape
: retorna o tamanho do tensor ao longo de cada um de seus eixos.Tensor.dtype
: retorna o tipo de todos os elementos no tensor.
O TensorFlow implementa operações matemáticas padrão nos tensores, bem como muitas operações específicas para aprendizado de máquina.
Por exemplo:
Observação: normalmente, em qualquer lugar em que uma função do TensorFlow espera um Tensor
como entrada, a função também aceitará qualquer coisa que possa ser convertida em um Tensor
usando tf.convert_to_tensor
. Veja abaixo um exemplo.
Realizar grandes cálculos via CPU pode ser lento. Quando configurado de forma correta, o TensorFlow pode usar hardwares aceleradores, como GPUs, para executar operações mais rapidamente.
Consulte o Guia de Tensores para mais detalhes.
Variáveis
Objetos tf.Tensor
comuns são imutáveis. Para armazenar pesos de modelo (ou outro estado mutável) em TensorFlow, use tf.Variable
.
Consulte o Guia de Variáveis para obter detalhes.
Diferenciação Automática
O método do gradiente descendente e algoritmos relacionados são a base do aprendizado de máquina moderno.
Para ativar isso, o TensorFlow implementa a diferenciação automática (autodiff), que usa cálculo diferencial e integral para computar gradientes. Normalmente, isto será usado para calcular o gradiente do erro ou perda de um modelo em relação a seus pesos.
Em x = 1.0
, y = f(x) = (1**2 + 2*1 - 5) = -2
.
A derivada de y
é y' = f'(x) = (2*x + 2) = 4
. O TensorFlow pode calcular isto automaticamente:
Este exemplo simplificado apenas pega a derivada em relação a um único escalar (x
), mas o TensorFlow pode calcular a gradiente em relação a qualquer número de tensores não escalares simultaneamente.
Consulte o guia Autodiff para mais detalhes.
Grafos e tf.function
Embora você possa utilizar o TensorFlow de forma interativa como qualquer biblioteca Python, o TensorFlow também fornece ferramentas para:
Otimização de desempenho: para acelerar treinamento e inferência.
Exportação: para que você possa salvar o seu modelo quando ele terminar o treinamento.
Isto requer que você use tf.function
para separar o seu código TensorFlow puro do Python.
A primeira vez que você executa tf.function
, embora seja executada em Python, ela captura um grafo completo e otimizado que representa as computações do TensorFlow feitas dentro da função.
Nas chamadas subsequentes, o TensorFlow executa apenas o grafo otimizado, ignorando todos os passos não relacionados ao TensorFlow. Abaixo, observe que my_func
não mostra rastreamento, pois print
é uma função do Python, e não uma função do TensorFlow.
Um grafo pode não ser reutilizável para entradas com uma assinatura diferente (shape
e dtype
), portanto, um novo grafo é gerado:
Esses grafos capturados fornecem dois benefícios:
Em muitos casos, eles fornecem uma aceleração significativa na execução (embora não neste exemplo trivial).
Você pode exportar esses grafos, usando
tf.saved_model
, para executar em outros sistemas como um servidor ou um dispositivo móvel, sem necessidade de instalação do Python.
Consulte Introdução aos grafos para mais detalhes.
Módulos, camadas e modelos
tf.Module
é uma classe para gerenciar seus objetos tf.Variable
e os objetos tf.function
que operam neles. A classe tf.Module
é necessária para dar suporte a dois recursos significativos:
Você pode salvar e restaurar os valores de suas variáveis usando
tf.train.Checkpoint
. Isso é útil durante o treinamento, pois é rápido salvar e restaurar o estado de um modelo.Você pode importar e exportar os valores
tf.Variable
e os grafostf.function
usandotf.saved_model
. Isto permite que você execute seu modelo independentemente do programa Python que o criou.
Aqui está um exemplo completo de exportação de um objeto tf.Module
simples:
Salve o Module
:
O SavedModel resultante é independente do código que o criou. Você pode carregar um SavedModel do Python, outros mapeamentos de linguagem ou TensorFlow Serving. Você também pode convertê-lo para ser executado com TensorFlow Lite ou TensorFlow JS.
As classes tf.keras.layers.Layer
e tf.keras.Model
são construídas sobre tf.Module
fornecendo funcionalidade adicional e métodos convenientes para construir, treinar e salvar modelos. Algumas delas são demonstradas na próxima seção.
Consulte Introdução aos módulos para mais detalhes.
Loops de treinamento
Agora junte tudo isso para construir um modelo básico e treiná-lo do zero.
Primeiro, crie alguns dados de exemplo. Isso gera uma nuvem de pontos que segue vagamente uma curva quadrática:
Crie um modelo quadrático com pesos inicializados aleatoriamente e um bias (tendência):
Primeiro, observe o desempenho do seu modelo antes do treino:
Agora, defina uma perda para o seu modelo:
Dado que este modelo se destina a prever valores contínuos, o erro quadrático médio (MSE) é uma boa escolha para a função de perda. Dado um vetor de previsões, , e um vetor de alvos verdadeiros, , o MSE é definido como a média das diferenças quadradas entre os valores previstos e a verdade básica.
Escreva um loop de treinamento básico para o modelo. O loop fará uso da função de perda MSE e seus gradientes em relação à entrada para atualizar iterativamente os parâmetros do modelo. O uso de minilotes para treinamento garante eficiência de memória e convergência mais rápida. A API tf.data.Dataset
possui funções úteis para lote e embaralhamento.
Agora observe o desempenho do seu modelo após o treinamento:
Isso está funcionando, mas lembre-se de que implementações de utilitários de treinamento comuns já estão disponíveis no módulo tf.keras
. Portanto, considere usá-los antes de escrever o seu próprio. Para começar, os métodos Model.compile
e Model.fit
implementam um loop de treinamento para você:
Comece criando um modelo sequencial em Keras usando tf.keras.Sequential
. Uma das camadas Keras mais simples é a camada densa, que pode ser instanciada com tf.keras.layers.Dense
. A camada densa é capaz de aprender relações lineares multidimensionais da forma . Para aprender uma equação não linear da forma , a entrada da camada densa deve ser uma matriz de dados com e como características. A camada lambda, tf.keras.layers.Lambda
, pode ser usada para realizar essa transformação de empilhamento.
Observe o desempenho do seu modelo Keras após o treinamento:
Consulte Loops de treinamento básico e o guia Keras para obter mais detalhes.