Denne tutorial viser, uddannelse en simpel Convolutional Neurale Netværk (CNN) til at klassificere CIFAR billeder. Fordi denne tutorial bruger Keras sekventiel API, skabe og uddannelse vores model vil tage blot et par linjer kode.,
Import TensorFlow
import tensorflow as tffrom tensorflow.keras import datasets, layers, modelsimport matplotlib.pyplot as plt
Hent og forberede CIFAR10 datasæt
CIFAR10 datasæt indeholder 60,000 farve billeder i 10 klasser, med 6000 billeder i hver klasse. Datasættet er opdelt i 50.000 træningsbilleder og 10.000 testbilleder. Klasserne udelukker hinanden, og der er ingen overlapning mellem dem.
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz170500096/170498071 - 11s 0us/step
Bekræft dataene
for at kontrollere, at datasættet ser korrekt ud, lad os plotte de første 25 billeder fra træningssættet og vise klassenavnet under hvert billede.,
Opret convolutional base
6 linjer af kode under definere convolutional base ved hjælp af et fælles mønster: en stak af Conv2D og MaxPooling2D lag.
som input tager en CNN tensorer af form (image_height, image_ .idth, color_channels), ignorerer batchstørrelsen. Hvis du er ny til disse dimensioner, henviser color_channels til (R,G,B). I dette eksempel konfigurerer du vores CNN til at behandle input af form (32, 32, 3), som er formatet for CIFAR-billeder. Du kan gøre dette ved at overføre argumentet input_shape
til vores første lag.,
lad os vise arkitekturen i vores model hidtil.
model.summary()
Ovenfor, kan du se, at produktionen af hver Conv2D og MaxPooling2D lag er en 3D-tensor af formen (højde, bredde, kanaler). Bredden og højden dimensioner tendens til at skrumpe som du går dybere i netværket. Antallet af udgangskanaler for hvert Conv2D-lag styres af det første argument (f.eks. 32 eller 64). Når bredden og højden krymper, har du typisk råd til (beregningsmæssigt) at tilføje flere udgangskanaler i hvert Conv2D-lag.,
Tilføj tætte lag ovenpå
for at afslutte vores model vil du fodre den sidste outputtensor fra den konvolutionelle base (af Form (4, 4, 64)) i et eller flere tætte lag for at udføre klassificering. Tætte lag tager vektorer som input (som er 1D), mens den aktuelle udgang er en 3D tensor. Først vil du flade (eller rulle) 3D-udgangen til 1D, og derefter tilføje et eller flere tætte lag ovenpå. CIFAR har 10 outputklasser, så du bruger et sidste tæt lag med 10 udgange.
model.add(layers.Flatten())model.add(layers.Dense(64, activation='relu'))model.add(layers.Dense(10))
Her er den komplette arkitektur af vores model.,
model.summary()
som du kan se, blev vores (4, 4, 64) udgange fladt ud i vektorer af form (1024), før de gik gennem to tætte lag.
Indsamle og træne den model
Vurdere model
313/313 - 1s - loss: 0.8840 - accuracy: 0.7157
print(test_acc)
Skriv et svar