Vista TensorFlow.org Esegui in Google Colab Visualizza sorgente su GitHub Scaricare notebook

Questo tutorial mostra la formazione di un semplice Convolutional Neural Network (CNN) per classificare CIFAR immagini. Poiché questo tutorial utilizza l’API sequenziale Keras, la creazione e la formazione del nostro modello richiederanno solo poche righe di codice.,

Importa TensorFlow

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

Scarica e prepara il set di dati CIFAR10

Il set di dati CIFAR10 contiene 60.000 immagini a colori in 10 classi, con 6.000 immagini in ogni classe. Il set di dati è suddiviso in 50.000 immagini di formazione e 10.000 immagini di test. Le classi si escludono a vicenda e non vi è alcuna sovrapposizione tra di loro.

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

Verifica i dati

Per verificare che il set di dati sia corretto, tracciamo le prime 25 immagini dal set di allenamento e visualizziamo il nome della classe sotto ogni immagine.,

Crea la base convoluzionale

Le 6 righe di codice riportate di seguito definiscono la base convoluzionale utilizzando un modello comune: una pila di livelli Conv2D e MaxPooling2D.

Come input, una CNN prende tensori di forma (image_height, image_width, color_channels), ignorando la dimensione del batch. Se sei nuovo a queste dimensioni, color_channels si riferisce a (R,G, B). In questo esempio, configurerai la nostra CNN per elaborare gli input di shape (32, 32, 3), che è il formato delle immagini CIFAR. Puoi farlo passando l’argomentoinput_shape al nostro primo livello.,

Visualizziamo l’architettura del nostro modello finora.

model.summary()

Sopra, puoi vedere che l’output di ogni livello Conv2D e MaxPooling2D è un tensore 3D di forma (altezza, larghezza, canali). Le dimensioni di larghezza e altezza tendono a ridursi man mano che si approfondisce la rete. Il numero di canali di uscita per ogni livello Conv2D è controllato dal primo argomento (ad esempio, 32 o 64). In genere, man mano che la larghezza e l’altezza si restringono, puoi permetterti (computazionalmente) di aggiungere più canali di uscita in ogni livello Conv2D.,

Aggiungere strati densi sulla parte superiore

Per completare il nostro modello, si alimenterà l’ultimo tensore di uscita dalla base convoluzionale (di forma (4, 4, 64)) in uno o più strati densi per eseguire la classificazione. Gli strati densi prendono i vettori come input (che sono 1D), mentre l’uscita corrente è un tensore 3D. Per prima cosa, appiattirai (o srotolerai) l’output 3D su 1D, quindi aggiungerai uno o più strati densi sopra. CIFAR ha 10 classi di output, quindi si utilizza uno strato denso finale con 10 uscite.

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

Ecco l’architettura completa del nostro modello.,

model.summary()

Come puoi vedere, le nostre uscite (4, 4, 64) sono state appiattite in vettori di forma (1024) prima di passare attraverso due strati densi.

Compilare e addestrare il modello

Valutare il modello

313/313 - 1s - loss: 0.8840 - accuracy: 0.7157

print(test_acc)