Path: blob/master/site/pt-br/tutorials/estimator/premade.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
Estimadores pré-criados
Aviso: os Estimadores não são recomendados para novos códigos. Os Estimadores executam código
v1.Session
, que é mais difícil de escrever corretamente e pode se comportar de forma inesperada, ainda mais quando usado em conjunto com código do TF 2. Os Estimadores são abarcados pelas garantias de compatibilidade, mas não recebem mais correções, exceto para vulnerabilidades de segurança. Confira mais detalhes no guia de migração.
Este tutorial mostra como resolver o problema de classificação da íris no TensorFlow usando Estimadores. Um Estimador é uma representação de alto nível de um modelo completo legada do TensorFlow. Confira mais detalhes em Estimadores.
Observação: no TensorFlow 2.0, a API Keras pode realizar essas mesmas tarefas e é considerada uma API mais fácil de aprender. Se você estiver começando do zero, é recomendável usar o Keras.
Em primeiro lugar
Para começar, você importará o TensorFlow e diversas bibliotecas necessárias.
O dataset
O programa de amostra neste documento cria e testa um modelo que classifica flores de íris em três espécies diferentes com base no tamanho das sépalas e pétalas.
Você treinará um modelo usando o dataset de íris. O dataset contém quatro características e um rótulo. As quatro características identificam os seguintes aspectos botânicos das flores de íris individuais:
comprimento da sépala
largura da sépala
comprimento da pétala
largura da pétala
Com base nessas informações, você pode definir algumas constantes úteis para processar os dados:
Em seguida, baixe e processe o dataset de íris usando o Keras e o Pandas. Mantenha datasets diferentes para treinamento e teste.
Você pode inspecionar seus dados para ver se tem quatro colunas de características float e um rótulo int32.
Para cada um dos datasets, divida os rótulos, que o modelo será treinado para prever.
Visão geral da programação com Estimadores
Agora que você configurou os dados, pode definir um modelo usando um Estimador do TensorFlow. Um Estimador é qualquer classe derivada do tf.estimator.Estimator
. O TensorFlow oferece uma coleção de tf.estimator
(por exemplo, LinearRegressor
) para implementar algoritmos de ML comuns. Além disso, você pode escrever seus próprios Estimadores personalizados. É recomendável usar Estimadores pré-criados quando estiver começando.
Para escrever um programa do TensorFlow baseado em Estimadores pré-criados, você precisa realizar as seguintes tarefas:
Crie uma ou mais funções de entrada.
Defina as colunas de características do modelo.
Instancie um Estimador, especificando as colunas de características e vários hiperparâmetros.
Chame um ou mais métodos no objeto Estimador, passando a função de entrada apropriada como a origem dos dados.
Vamos ver como essas tarefas são implementadas para a classificação de íris.
Crie funções de entrada
Você precisa criar funções de entrada para fornecer dados para treinamento, avaliação e previsão.
Uma função de entrada retorna um objeto tf.data.Dataset
que gera a seguinte tupla de dois elementos:
features
— um dicionário no Python em que:Cada chave é o nome de uma característica.
Cada valor é um array com todos os valores dessa característica.
label
— um array com os valores do rótulo para cada exemplo.
Só para demonstrar o formato da função de entrada, aqui está uma implementação simples:
Sua função de entrada pode gerar o dicionário features
e a lista label
da maneira que você quiser. No entanto, é recomendável usar a API Dataset do TensorFlow, que pode processar todos os tipos de dados.
A API Dataset consegue lidar com vários casos comuns para você. Por exemplo, usando a API Dataset, você pode ler facilmente os registros de uma grande coleção de arquivos em paralelo e combiná-los em um único fluxo.
Para simplificar as coisas, neste exemplo, você carregará os dados com o pandas e criará um pipeline de entrada a partir destes dados na memória:
Defina as colunas de características
Uma coluna de características é um objeto que descreve como o modelo deve usar os dados brutos de entrada do dicionário "features". Ao criar um modelo de Estimador, você passa uma lista de colunas de características que descreve cada uma das características que você quer que o modelo use. O módulo tf.feature_column
oferece várias opções de representação de dados para o modelo.
Para a íris, as 4 características brutas são valores numéricos, então você criará uma lista de colunas de características para dizer ao modelo do Estimador representar cada uma das quatro características como valores de pontos flutuantes de 32 bits. Portanto, o código para criar a coluna é o seguinte:
As colunas de características podem ser muito mais sofisticadas do que as mostradas aqui. Você pode ler mais sobre essas colunas neste guia.
Agora que você tem a descrição de como quer que o modelo represente as características brutas, pode criar o estimador.
Instancie um estimador
A íris é um problema clássico de classificação. Felizmente, o TensorFlow oferece vários Estimadores classificadores pré-criados, incluindo:
tf.estimator.DNNClassifier
para modelos profundos que realizam a classificação de várias classes.tf.estimator.DNNLinearCombinedClassifier
para modelos profundos e abrangentes.tf.estimator.LinearClassifier
para classificadores com base em modelos lineares.
Para o problema da íris, tf.estimator.DNNClassifier
parece ser a melhor opção. Veja como instanciar esse Estimador:
Treine, avalie e faça previsões
Agora que você tem um objeto Estimador, é possível chamar os métodos para fazer o seguinte:
Treinar o modelo.
Avaliar o modelo treinado.
Usar o modelo treinado para fazer previsões.
Treine o modelo
Treine o modelo ao chamar o método train
do Estimador da seguinte maneira:
Observe que a chamada de input_fn
é empacotada em um lambda
para capturar os argumentos ao fornecer uma função de entrada que não aceita argumentos, conforme esperado pelo Estimador. O argumento steps
diz ao método para interromper o treinamento após um determinado número de passos.
Avalie o modelo treinado
Agora que o modelo foi treinado, você pode obter algumas estatísticas sobre o desempenho dele. O bloco de código a seguir avalia a exatidão do modelo treinado com os dados de teste:
Ao contrário da chamada do método train
, você não passou o argumento steps
para avaliação. O input_fn
para avaliação só gera uma única época de dados.
O dicionário eval_result
também contém a average_loss
(perda média por amostra), a loss
(perda média por minilote) e o valor do global_step
do Estimador (o número de iterações de treinamento realizadas).
Fazer previsões (inferir) com o modelo treinado
Agora, você tem um modelo treinado que produz bons resultados de avaliação. É possível usar o modelo treinado para prever as espécies de uma flor de íris com base em algumas medidas não rotuladas. Assim como no treinamento e na avaliação, você faz previsões usando uma única chamada de função:
O método predict
retorna uma iterável em Python, gerando um dicionário de resultados previstos para cada exemplo. O código a seguir imprime algumas previsões e suas probabilidades.