Zicht op TensorFlow.org Uitvoeren in Google Samenwerking bron Weergeven op GitHub Download notebook

in Deze zelfstudie ziet u de training een eenvoudige Convolutional Neurale Network (CNN) voor het classificeren van CIFAR beelden. Omdat deze tutorial gebruik maakt van de Keras Sequential API, zal het maken en trainen van ons model slechts een paar regels code.,

TensorFlow importeren

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

Download en bereid de cifar10-dataset

De cifar10-dataset bevat 60.000 kleurenafbeeldingen in 10 klassen, met 6.000 afbeeldingen in elke klasse. De dataset is verdeeld in 50.000 trainingsafbeeldingen en 10.000 testafbeeldingen. De klassen sluiten elkaar uit en overlappen elkaar niet.

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

controleer de gegevens

om te controleren of de dataset er correct uitziet, plotten we de eerste 25 afbeeldingen uit de trainingsset en tonen we de klassenaam onder elke afbeelding.,

maak de convolutionele basis

de 6 regels code hieronder definiëren de convolutionele basis met behulp van een gemeenschappelijk patroon: een stapel Conv2D-en MaxPooling2D-lagen.

als invoer neemt een CNN tensors van vorm (image_height, image_width, color_channels), waarbij de batchgrootte wordt genegeerd. Als je nieuw bent in deze dimensies, verwijst color_channels naar (R, G, B). In dit voorbeeld configureert u onze CNN om ingangen van vorm (32, 32, 3) te verwerken, wat het formaat van cifar-afbeeldingen is. U kunt dit doen door het argument input_shape door te geven aan onze eerste laag.,

laten we de architectuur van ons model tot nu toe tonen.

model.summary()

hierboven kunt u zien dat de uitvoer van elke Conv2D-en MaxPooling2D-laag een 3D-tensor van vorm is (Hoogte, Breedte, kanalen). De breedte en hoogte afmetingen hebben de neiging om te krimpen als je dieper in het netwerk. Het aantal uitvoerkanalen voor elke Conv2D-laag wordt bepaald door het eerste argument (bijvoorbeeld 32 of 64). Meestal, als de breedte en hoogte krimpen, kunt u het zich veroorloven (computationeel) om meer uitvoerkanalen toe te voegen in elke Conv2D-laag.,

voeg dichte lagen bovenop

om ons model te voltooien, voert u de laatste uitvoer tensor van de convolutionele basis (van vorm (4, 4, 64)) in een of meer dichte lagen om classificatie uit te voeren. Dichte lagen nemen vectoren als input (die 1D zijn), terwijl de huidige output een 3D tensor is. Eerst zal je de 3D-uitvoer plat maken (of uitrollen) naar 1D, en vervolgens een of meer dichte lagen bovenop toevoegen. CIFAR heeft 10 outputklassen, dus je gebruikt een laatste dichte laag met 10 outputs.

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

Hier is de complete architectuur van ons model.,

model.summary()

zoals u kunt zien, werden onze (4, 4, 64) uitgangen afgeplat in vectoren van vorm (1024) voordat ze door twee dichte lagen gingen.

compileer en train het model

evalueer het model

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

print(test_acc)