Path: blob/master/site/pt-br/r1/tutorials/keras/basic_classification.ipynb
25118 views
Copyright 2018 The TensorFlow Authors.
Treine a sua primeira rede neural: Classificação Básica
Note: A nossa comunidade TensorFlow traduziu estes documentos. Como as traduções da comunidade são o melhor esforço, não há garantias de que sejam uma reflexão exata e atualizada da documentação oficial em Inglês. Se tem alguma sugestão para melhorar esta tradução, por favor envie um pull request para o repositório do GitHub tensorflow/docs. Para se voluntariar para escrever ou rever as traduções da comunidade, contacte a lista [email protected].
Este guia treina um modelo de uma rede neural para classificar imagens de roupa, como ténis ou camisolas. Não há problema se não perceber os detalhes, isto é uma revisão rápida de um programa completo em TensorFlow com os detalhes explicados à medida que avançamos.
Este guia usa tf.keras, uma API de alto nivel para construir e treinar modelos em TensorFlow.
Importar o dataset Fashion MNIST
Este guia usa a base de dados Fashion MNIST que contém 70.000 imagens a preto e branco de 10 categorias diferentes. As imagens apresentam peças de roupa individuais com pouca resolução (28 por 28 píxeis), como podem ser vistas aqui:
![]() |
Figure 1. Fashion-MNIST samples (by Zalando, MIT License). |
Fashion MNIST tem a intenção de substituir a base de dados clássica MNIST, que é usualmente utilizada como "Olá, Mundo" de programas de aprendizagem de máquina para visão computacional. A base de dados MNIST contém imagens de dígitos manuscritos (0, 1, 2, etc) num formato idêntico ao dos artigos de roupa que vamos utilizar aqui.
Este guia utiliza Fashion MNIST para variedade, e porque é um problema ligeiramente mais desafiante do que a MNIST. Ambas as bases de dados são relativamente pequenas e são utilizadas para verificar se os algoritmos trabalham como é esperado. São um bom início para testar e depurar o código.
Vamos utilizar 60.000 imagens para treinar a rede e 10.000 imagens para avaliar quão bem a rede aprendeu a classificar as imagens. Você pode acessar a base de dados Fashion MNIST diretamente a partir do TensorFlow, basta importar os dados:
Carregar a base de dados retorna quatro NumPy arrays:
As
train_images
etrain_labels
arrays são o training set— os dados que o modelo utiliza para aprenderO modelo é testado no test set, os arrays de
test_images
e ostest_labels
.
As images são 28x28 Numpy arrays, onde os valores de cada pixel variam entre 0 e 255. Os labels são um vetor de inteiros, que varia entre 0 e 9. Estes correspondem à classe de roupa que a imagem representa:
Label | Class |
---|---|
0 | T-shirt/top |
1 | Trouser |
2 | Pullover |
3 | Dress |
4 | Coat |
5 | Sandal |
6 | Shirt |
7 | Sneaker |
8 | Bag |
9 | Ankle boot |
Cada imagem é mapeada para um único label. Uma vez que os nomes das classes não estão incluídos na base de dados, guardamos aqui para mais tarde usar nos gráficos das images:
Explorar os dados
Vamos explorar o formato da base de dados antes de treinar o modelo. De seguida, mostra-se que existem 60.000 imagens nos dados de treino, com cada imagem representada com 28x28 píxeis:
De igual forma, existem 60.000 labels no dados de treino:
Cada label é um inteiro entre 0 e 9:
Existem 10.000 imagens nos dados de teste. Cada imagem é novamente representada por 28 x 28 píxeis:
E os dados de teste contém 10.000 labels de image:
Pré-processamento dos dados
Os dados devem ser pré-processados antes de treinar a rede. Se observar a primeira imagem dos dados de treino, vai ver que o valor de cada píxel vai estar no intervalo entre 0 e 255:
Nós escalamos estes valores para estarem no intervalo de 0 a 1 antes de entrar no modelo neural. Para isso, dividimos os valores por 255. É importante que os dados de treino e os dados de teste sejam processados da mesma forma:
Mostre as primeiras 25 imagens dos dados de treino e a classe a que pertence por baixo de cada imagem. Verifique que os dados estão no formato correto e estamos prontos para contruir e treinar a rede.
Construir o modelo
Construir a rede neural requer a configuração das camadas do modelo, e depois a compilação do modelo.
Configurar as camadas
O bloco básico de uma rede neural é a layer (camada). As camadas extraem representações dos dados que as alimentam. E, esperançosamente, estas representações têm mais significado para o problema em mãos.
A maioria do deep learning consiste em encadear camadas simples. A maioria das camadas, como tf.keras.layers.Dense
, têm parâmetros que são aprendidos durante o treino.
A primeira camada desta rede, tf.keras.layers.Flatten
, transforma o formato das imagens de um vector 2D (de 28 por 28 píxeis), num vetor 1D de 28 * 28 = 784 píxeis. Considere esta camada como retirar as linhas de píxeis da imagem e alinhá-las. Esta camada não tem parâmetros para aprender; apenas re-formata os dados.
Depois de os píxeis estarem alinhados, a rede consiste numa sequência de duas camadas tf.keras.layers.Dense
. Estas são categorizadas como densely-connected, ou fully-connected. A primeira camada Dense
tem 128 nós (ou neurónios). A segunda (e última) é uma camada softmax com 10 nós - isto retorna um vetor com 10 valores de probabilidade que soma 1. Cada nó contém o valor que indica a probabilidade que a image atual pertence a uma das 10 classes.
Compila o modelo
Antes de o modelo estar pronto para treinar, este precisa de mais algumas configurações. Estas são adicionadas no passo compile:
Função de custo - Isto mede quão bem o modelo classifica durante o treino. Nós queremos minimizar esta função para ajustar o modelo na direção correta
Otimizador - Isto é utilizado para atualizar o modelo com base nos dados e na função de custo.
Métricas - São utilizadas para monitorizar os passos de treino e teste. O próximo exemplo usa exatidão, a fração das images que são corretamente classificadas.
Treinar o modelo
Treinar o modelo da rede neural requer os seguintes passos:
Alimentar o modelo com os dados de treino, neste caso os vetores
train_images
etrain_labels
.O modelo aprende a associar as imagens e os labels.
Nós pedimos ao modelo para fazer uma previsão nos dados de teste - neste exemplo, o vetor
test_images
. Verificamos as previsões com o vetor de labelstest_labels
.
Para começar a treinar, chamamos o método mode.fit
- o modelo vai ser a aproximado para descrever os dados de treino:
À medida que o modelo treina, a função de custo e as métricas de exatidão são mostradas. Este modelo atinge uma exatidão de cerca de 0.88 (ou 88%) nos dados de treino.
Avaliar a exatidão
De seguida, compare como o modelo se comporta nos dados de test:
Ao que parece, a exatidão nos dados de teste é um pouco menor do que a exatidão nos dados de treino. Esta lacuna entre a exatidão de treino e de teste é um exemplo de overfitting. Que significa quando um modelo de aprendizagem automática funciona pior em dados novos do que naqueles em que foi treinado.
Fazer previsões
Com o modelo treinado, podemos utiliza-lo para fazer previsões sobre algumas imagens.
Aqui, o modelo previu o label para cada imagem nos dados de treino. Vamos observar a primeira previsão:
A previsão é um vetor de 10 números. Este descrevem a "confiança" que o modelo tem de que esta imagem pertence a cada um dos 10 artigos diferentes de roupa. Podemos ver qual o rótulo apresenta a maior confiança:
Então o modelo está mais confiante de que a image é ankle boot, ou class_names[9]
. E podemos verificar o label do teste para verificar que está correto:
Podemos criar o gráfico para observar todos os 10 canais.
Vamos observar a imagem 0, as previsões, e o vector de previsão.
Vamos criar o gráfico com várias imagens e as suas previsões. As previsões correta encontram-se a azul e as incorretas a vermelho. O número indica a percentagem (em 100) para o label previsto. De notar, que pode estar errado mesmo quando o nível de confiança é elevado.
Finalmente, use o modelo treinado para fazer previsões sobre uma única imagem.
Os modelos tf.keras
estão otimizados para fazer previsões num batch, ou coleção, de exemplos de uma vez. Então, ainda que só estejamos a utilizar uma imagem temos de adicioná-la a uma lista:
Agora faça uma previsão sobre a imagem:
model.predict
retorna uma lista de listas, uma para cada imagem do batch de dados. Selecione a previsão para a única image do batch:
E tal como antes, o modelo prevê o label 9.