Path: blob/master/site/pt-br/tutorials/images/cnn.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
Rede Neural Convolucional (CNN)
Este tutorial demonstra o treinamento de uma Rede Neural Convolucional (CNN, na sigla em inglês) simples para classificar imagens do CIFAR. Como este tutorial usa a API Sequential do Keras, serão necessárias apenas algumas linhas de código para criar e treinar o modelo.
Importar o TensorFlow
Baixar e preparar o dataset CIFAR10
O dataset CIFAR10 contém 60.000 imagens coloridas em 10 classes, com 6.000 imagens em cada uma. O dataset é dividido em 50.000 imagens de treinamento e 10.000 imagens de teste. As classes são mutuamente exclusivas, e não há sobreposições entre elas.
Verificar os dados
Para verificar se o dataset parece estar correto, vamos plotar as primeiras 25 imagens do conjunto de treinamento e exibir o nome da classe abaixo de cada imagem:
Criar a base convolucional
As seis linhas de código abaixo definem a base convolucional usando um padrão comum: uma pilha de camadas Conv2D e MaxPooling2D.
Uma CNN recebe como entrada tensores de formato (image_height, image_width, color_channels), ignorando o tamanho do lote. Se essas dimensões forem novidade para você, color_channels refere-se a (R,G,B). Neste exemplo, você vai configurar sua CNN para processar entradas de formato (32, 32, 3), que é o formato das imagens do CIFAR. Para fazer isso, basta passar o argumento input_shape
para sua primeira camada.
Vamos exibir a arquitetura do modelo até o momento:
Acima, você pode ver que a saída de cada camada Conv2D e MaxPooling2D é um tensor tridimensional de formato (altura, largura, canais). As dimensões de largura e altura costumam encolher à medida que você se aprofunda na rede. O número de canais de saída para cada camada Conv2D é controlado pelo primeiro argumento (por exemplo, 32 ou 64). Tipicamente, como a largura e a altura encolhem, você consegue suportar (computacionalmente) a adição de mais camadas de saída a cada camada Conv2D.
Adicionar camadas Dense
Para completar o modelo, você alimentará o último tensor de saída da base convolucional [de formato (4, 4, 64)] em uma ou mais camadas Dense para fazer a classificação. As camadas Dense recebem vetores como entrada (com 1 dimensão), enquanto a saída atual é um tensor com 3 dimensões. Primeiro, você achatará (ou converterá) a saída de 3 dimensões para 1 dimensão, depois adicionará uma ou mais camadas Dense. O CIFAR tem 10 classes de saída, então você usa uma camada Dense final com 10 saídas.
Veja a arquitetura completa do modelo:
O resumo da rede mostra que saídas (4, 4, 64) foram achatadas em vetores de formato (1024) antes de passarem por duas camadas Dense.
Compilar e treinar o modelo
Avaliar o modelo
A sua CNN simples alcançou uma exatidão de teste acima de 70%. Nada mal para poucas linha de código! Para ver outro estilo de CNN, confira o exemplo Guia de início rápido do TensorFlow 2 para especialistas, que usa a API de subclasses do Keras e tf.GradientTape
.