ver en TensorFlow.org Ejecutar en Google Colab ver fuente en GitHub descargar notebook

Este tutorial demuestra la formación de una red neuronal convolucional simple (CNN) para clasificar imágenes CIFAR. Debido a que este tutorial utiliza la API secuencial de Keras, crear y entrenar nuestro modelo tomará solo unas pocas líneas de código.,

importar TensorFlow

import tensorflow as tffrom tensorflow.keras import datasets, layers, modelsimport matplotlib.pyplot as plt

descargar y preparar el conjunto de datos CIFAR10

el conjunto de datos CIFAR10 contiene 60.000 imágenes en color en 10 clases, con 6.000 imágenes en cada clase. El conjunto de datos se divide en 50.000 imágenes de entrenamiento y 10.000 imágenes de prueba. Las clases son mutuamente excluyentes y no hay superposición entre ellas.

Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz170500096/170498071 - 11s 0us/step

verificar los datos

para verificar que el conjunto de datos se ve correcto, vamos a trazar las primeras 25 imágenes del conjunto de entrenamiento y mostrar el nombre de la clase debajo de cada imagen.,

crear la base convolucional

las 6 líneas de código a continuación definen la base convolucional utilizando un patrón común: una pila de capas Conv2D y MaxPooling2D.

como entrada, una CNN toma tensores de forma (image_height, image_width, color_channels), ignorando el tamaño del lote. Si usted es nuevo en estas dimensiones, color_channels se refiere a (R, G, B). En este ejemplo, configurarás nuestra CNN para procesar entradas de forma (32, 32, 3), que es el formato de las imágenes CIFAR. Puede hacer esto pasando el argumento input_shape a nuestra primera capa.,

Vamos a mostrar la arquitectura de nuestro modelo hasta ahora.

model.summary()

arriba, puede ver que la salida de cada capa Conv2D y MaxPooling2D es un tensor 3D de forma (altura, ancho, canales). Las dimensiones de ancho y alto tienden a reducirse a medida que se profundiza en la red. El número de canales de salida para cada capa Conv2D es controlado por el primer argumento (por ejemplo, 32 o 64). Normalmente, a medida que el ancho y la altura se reducen, puede permitirse (computacionalmente) agregar más canales de salida en cada capa Conv2D.,

agregue capas densas en la parte superior

para completar nuestro modelo, alimentará el último tensor de salida de la base convolucional (de forma (4, 4, 64)) en una o más capas densas para realizar la clasificación. Las capas densas toman vectores como entrada (que son 1D), mientras que la salida actual es un tensor 3D. Primero, aplanará (o desenrollará) la salida 3D a 1D, luego agregará una o más capas densas en la parte superior. CIFAR tiene 10 clases de salida, por lo que utiliza una capa densa final con 10 salidas.

model.add(layers.Flatten())model.add(layers.Dense(64, activation='relu'))model.add(layers.Dense(10))

Aquí está la arquitectura completa de nuestro modelo.,

model.summary()

como puede ver, nuestras salidas (4, 4, 64) se aplanaron en vectores de forma (1024) antes de pasar por dos capas densas.

Compilar y entrenar el modelo

Evaluar el modelo

313/313 - 1s - loss: 0.8840 - accuracy: 0.7157
print(test_acc)