denna handledning visar utbildning en enkel Convolutional Neural Network (CNN) att klassificera CIFAR bilder. Eftersom denna handledning använder keras Sekventiell API, skapa och träna vår modell tar bara några rader kod.,
importera TensorFlow
import tensorflow as tffrom tensorflow.keras import datasets, layers, modelsimport matplotlib.pyplot as plt
ladda ner och förbereda cifar10 dataset
cifar10 dataset innehåller 60.000 färgbilder i 10 klasser, med 6000 bilder i varje klass. Datauppsättningen är uppdelad i 50 000 träningsbilder och 10 000 testbilder. Klasserna är ömsesidigt exklusiva och det finns ingen överlappning mellan dem.
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz170500096/170498071 - 11s 0us/step
verifiera data
för att verifiera att datauppsättningen ser korrekt ut, låt oss rita de första 25 bilderna från träningsuppsättningen och visa klassnamnet under varje bild.,
skapa convolutional base
de 6 rader kod nedan definierar convolutional base med ett gemensamt mönster: En stapel Conv2D och MaxPooling2D lager.
som inmatning tar en CNN tensorer av form (image_height, image_width, color_channels) och ignorerar satsstorleken. Om du är ny på dessa dimensioner hänvisar color_channels till (R,G,B). I det här exemplet kommer du att konfigurera vår CNN för att bearbeta ingångar i form (32, 32, 3), vilket är formatet för CIFAR-bilder. Du kan göra detta genom att skicka argumentet input_shape
till vårt första lager.,
låt oss visa arkitekturen i vår modell hittills.
model.summary()
ovan kan du se att utgången från varje conv2d-och MaxPooling2D-lager är en 3D-tensor av form (höjd, bredd, kanaler). Bredden och höjden dimensioner tenderar att krympa när du går djupare i nätverket. Antalet utgångskanaler för varje conv2d-skikt styrs av det första argumentet (t.ex. 32 eller 64). Vanligtvis, som bredden och höjden krymper, har du råd (beräkningsmässigt) för att lägga till fler utgångskanaler i varje conv2d-lager.,
Lägg till täta lager på toppen
för att slutföra vår modell, kommer du att mata den sista utdata tensor från convolutional base (form (4, 4, 64)) i ett eller flera täta lager för att utföra klassificering. Täta lager tar vektorer som ingång (som är 1D), medan strömutgången är en 3D-tensor. Först kommer du att platta (eller rulla) 3D-utgången till 1D, lägg sedan till ett eller flera täta lager på toppen. CIFAR har 10 utgångsklasser, så du använder ett slutligt tätt lager med 10 utgångar.
model.add(layers.Flatten())model.add(layers.Dense(64, activation='relu'))model.add(layers.Dense(10))
här är hela arkitekturen i vår modell.,
model.summary()
som du kan se var våra (4, 4, 64) utgångar platta till formvektorer (1024) innan de gick igenom två täta lager.
sammanställa och träna modellen
utvärdera modellen
313/313 - 1s - loss: 0.8840 - accuracy: 0.7157
print(test_acc)
Lämna ett svar