Path: blob/master/site/pt-br/tutorials/keras/classification.ipynb
25118 views
Copyright 2018 The TensorFlow Authors.
Classificação básica: classificação de imagens de roupas
Este guia treina um modelo de rede neural para classificar imagens de roupas, como tênis e camisetas. Não tem problema se você não entender todos os detalhes. Esta é uma visão geral rápida de um programa completo do TensorFlow, e os detalhes são explicados aos poucos.
Este guia usa o tf.keras, uma API de alto nível, para criar e treinar modelos no TensorFlow.
Importar o dataset Fashion MNIST
Este guia usa o dataset Fashion MNIST, que contém 70 mil imagens em escala de cinza, em 10 categorias. As imagens mostram artigos de vestuário individuais com resolução baixa (28x28 pixels), conforme visto aqui:
![]() |
Imagem 1. Amostras do Fashion MNIST (por Zalando, Licença MIT). |
O Fashion MNIST é usado como substituto do dataset MNIST clássico, geralmente utilizado como o "Olá, mundo" dos programas de aprendizado de máquina para visão computacional. O dataset MNIST contém imagens de dígitos escritos à mão (0, 1, 2, etc.) em um formato idêntico ao dos artigos de vestuário que você usará aqui.
Este tutorial usa o Fashion MNIST por ser variado e por ser um problema um pouco mais desafiador que o MNIST comum. Os dois datasets são relativamente pequenos e são usados para verificar se um algoritmo funciona como esperado. Eles são bons pontos de partida para testar e depurar o código.
Aqui, 60 mil imagens são usadas para treinar a rede, e 10 mil imagens são usadas para avaliar com que exatidão a rede aprendeu a classificar as imagens. Você pode acessar o dataset Fashion MNIST diretamente no TensorFlow. Importe e carregue os dados do Fashion MNIST diretamente do TensorFlow:
Ao carregar o dataset, são retornadas quatro matrizes NumPy:
As matrizes
train_images
etrain_labels
são o conjunto de treinamento — os dados que o modelo usa para aprender.O modelo é estado com um conjunto de teste,
test_images
, e matrizestest_labels
.
As imagens são matrizes NumPy 28x28, sendo que os valores de pixel variam de 0 a 255. Os rótulos são uma matriz de números inteiros, que variam de 0 a 9. Eles correspondem à classe de roupas que a imagem representa:
Rótulo | Classe |
---|---|
0 | Camiseta/Top |
1 | Calça |
2 | Suéter |
3 | Vestido |
4 | Casaco |
5 | Sandália |
6 | Camisa |
7 | Tênis |
8 | Bolsa |
9 | Botim |
Cada imagem é mapeada para um único rótulo. Como os nomes das classes não estão incluídos no dataset, armazene-os aqui par usá-los posteriormente ao plotar as imagens:
Explorar os dados
Vamos explorar o formato do dataset antes de treinar o modelo. O código abaixo mostra que há 60 mil imagens no conjunto de treinamento, com cada imagem representada como pixels 28x28.
Da mesma forma, há 60 mil rótulos no conjunto de treinamento:
Cada rótulo é um número inteiro entre 0 e 9:
Há 10 mil imagens no conjunto de teste. Novamente, cada imagem é representada por pixels de 28x28:
E o conjunto de teste contém 10 mil rótulos de imagens:
Pré-processar os dados
Os dados precisam ser pré-processados antes de treinar a rede. Se você conferir a primeira imagem no conjunto de treinamento, verá que os valores de pixel ficam no intervalo de 0 a 255:
Mude a escala desses valores para o intervalo de 0 a 1 antes de alimentá-los no modelo da rede neural. Para fazer isso, divida os valores por 255. É importante que o conjunto de treinamento e o conjunto de teste sejam pré-processados da mesma forma:
Para verificar se os dados estão no formato correto e se está tudo pronto para criar e treinar a rede, vamos exibir as 25 primeiras imagens do conjunto de treinamento e vamos exibir também o nome da classe abaixo de cada imagem.
Criar o modelo
Criar a rede neural requer a configuração das camadas do modelo e depois a compilação do modelo.
Configurar as camadas
O bloco de construção básico de uma rede neural é a camada. As camadas extraem representações dos dados alimentados nela. Espera-se que essas representações tenham um significado para o problema em questão.
A maioria dos aprendizados profundos consiste da combinação de camadas simples. A maioria das camadas, como tf.keras.layers.Dense
, têm parâmetros que são aprendidos durante o treinamento.
A primeira camada desta rede, tf.keras.layers.Flatten
, transforma o formato das imagens de uma matriz bidimensional (de pixels 28x28) em uma matriz unidimensional (de 28 * 28 = 784 pixels). Pense nessa camada como pegar as linhas de pixels da imagem e enfileirá-las. Essa camada não tem parâmetros a aprender, ela somente reformata os dados.
Após os pixels serem achatados, a rede consiste de uma sequência de duas camadas tf.keras.layers.Dense
, que são camadas neurais densamente conectadas, ou totalmente conectadas. A primeira camada Dense
tem 128 nós (ou neurônios). A segunda (e última) camada retorna uma matriz de logits, com tamanho igual a 10. Cada nó contém uma pontuação que indica que a imagem atual pertence a uma das 10 classes.
Compilar o modelo
Antes que o modelo fique pronto para o treinamento, é preciso fazer mais algumas configurações, que são adicionadas durante o passo de compilação do modelo:
Função de perda — Mensura a exatidão do modelo durante o treinamento. Você vai querer minimizar essa função para "guiar" o modelo para a direção certa.
Otimizador — Indica como o modelo é atualizado com base nos dados que vê e em sua função de perda.
Métricas — Usadas para monitorar os passos de treinamento e teste. O exemplo abaixo usa exatidão, a fração das imagens que estão classificadas corretamente.
Treinar o modelo
O treinamento da modelo de rede neural requer os seguintes passos:
Alimentar os dados de treinamento no modelo. Neste exemplo, os dados de treinamento estão nas matrizes
train_images
etrain_labels
.O modelo aprende a associar imagens e rótulos.
Você pede para o modelo fazer previsões sobre um conjunto de teste. Neste exemplo, é a matriz
test_images
.Verifique se as previsões correspondem aos rótulos da matriz
test_labels
.
Alimentar o modelo
Para iniciar o treinamento, faça uma chamada ao método model.fit
, chamado de "fit" (adequar) porque ele faz o modelo "se adequar" aos dados de treinamento:
À medida que o modelo é treinado, as métricas de perda e exatidão são exibidas. Este modelo atinge uma exatidão de cerca de 0,91 (91%) para os dados de treinamento.
Avaliar a exatidão
Agora, compare o desempenho do modelo para o dataset de teste:
Percebe-se que a exatidão para o dataset de teste é um pouco menor do que para o dataset de treinamento. Essa discrepância entre a exatidão do treinamento e a exatidão do teste representa o overfitting. O overfitting acontece quando um modelo de aprendizado de máquina tem um desempenho inferior com entradas novas, nunca vistas anteriormente, em comparação aos dados de treinamento. Um modelo com overfitting "memoriza" o ruído e os detalhes do dataset de treinamento a ponto de impactar negativamente o desempenho do modelo para novos dados. Se quiser saber mais, confira:
Fazer previsões
Com o modelo treinado, você pode usá-lo para fazer previsões sobre algumas imagens. Anexe uma camada softmax para converter as saídas lineares do modelo (logits) em probabilidades, que devem ser mais fáceis de interpretar.
Aqui, o modelo previu o rótulo de cada imagem no conjunto de teste. Vamos conferir a primeira previsão:
Uma previsão é uma matriz com 10 números. Eles representam a "confiança" do modelo de que a imagem corresponde a cada um dos 10 diferentes artigos de vestuário. Você pode ver qual rótulo tem o maior valor de confiança:
Portanto, o modelo tem maior confiança de que esta imagem é um botim, ou class_names[9]
. Ao avaliar o rótulo de teste, vemos que essa classificação está correta:
Gere um gráfico para ver o conjunto completo das 10 previsões de classe:
Verificar as previsões
Com o modelo treinado, você pode usá-lo para fazer previsões sobre algumas imagens.
Vamos conferir a imagem, previsão e matriz de previsões na posição 0. Os rótulos com previsão correta são azuis, e os rótulos com previsão incorreta são vermelhos. O número dá a porcentagem (até 100) do rótulo previsto.
Vamos plotar diversas imagens com suas previsões. Observe que o modelo pode errar mesmo quando tiver confiança alta.
Usar o modelo treinado
Por fim, use o modelo treinado para fazer uma previsão sobre uma única imagem.
Os modelos do tf.keras
são otimizados para fazer previsões para um lote, ou coleção, de exemplos ao mesmo tempo. Mesmo que você esteja usando uma única imagem, precisa adicioná-la a uma lista:
Agora, faça a previsão do rótulo correto para essa imagem:
tf.keras.Model.predict
retorna uma lista de listas: uma lista para cada imagem no lote de dados. Obtenha as previsões para nossa única imagem no lote:
E o modelo prevê um rótulo conforme esperado.