Utmaning: Bygga ett CNN
Konvolutionella neurala nätverk (CNN) används i stor utsträckning för bildklassificering tack vare deras förmåga att extrahera hierarkiska egenskaper. I denna uppgift kommer du att implementera och träna en VGG-liknande CNN med TensorFlow och Keras på CIFAR-10
-datasetet. Datasetet består av 60 000 bilder (32×32×3
) som tillhör 10 olika klasser, inklusive flygplan, bilar, fåglar, katter och fler.
Detta projekt vägleder dig genom inläsning av datasetet, förbehandling av bilder, definition av CNN-modellen, träning samt utvärdering av dess prestanda.

1. Datapreprocessering för CNN
Innan träning av en CNN är datapreprocessering ett avgörande steg för att säkerställa bättre prestanda och snabbare konvergens. Vanliga metoder för förbehandling inkluderar:
-
Normalisering: denna metod innebär att skala bilders pixelvärden från intervallet 0 till 255 till intervallet 0 till 1. Det implementeras ofta som
x_train / 255.0, x_test / 255.0
; -
One-hot-kodning: etiketter konverteras ofta till one-hot-kodade vektorer för klassificeringsuppgifter. Detta görs vanligtvis med funktionen
keras.utils.to_categorical
, som omvandlar heltalsetiketter (t.ex. 0, 1, 2, etc.) till en one-hot-kodad vektor, såsom[1, 0, 0, 0]
för ett klassificeringsproblem med 4 klasser.
2. Bygga CNN-arkitekturen
En CNN-arkitektur består av flera lager som utför olika uppgifter för att extrahera egenskaper och göra förutsägelser. Du kan implementera viktiga CNN-lager genom att:
Konvolutionellt lager (Conv2D)
keras.layers.Conv2D(filters, kernel_size, activation='relu', padding='same', input_shape=(height, width, channels))
Parametern input_shape
behöver du endast ange i inmatningslagret.
Poolningslager (MaxPooling2D)
keras.layers.MaxPooling2D(pool_size=(2, 2))
Flatten-lager
keras.layers.Flatten()
Dense-lager
layers.Dense(units=512, activation='relu')
layers.Dense(10, activation='softmax')
Det sista dense-lagret har vanligtvis ett antal enheter lika med antalet klasser och använder en softmax-aktiveringsfunktion för att ge en sannolikhetsfördelning över klasserna.
3. Modellkompilering
Efter att arkitekturen har definierats behöver modellen kompileras. Detta steg innebär att specificera förlustfunktion, optimerare och metrik som kommer att styra modellen under träningen. Följande metoder används ofta i CNN:
Optimerare (Adam)
Optimeraren justerar modellens vikter för att minimera förlustfunktionen. Adam-optimeraren är populär tack vare sin effektivitet och förmåga att anpassa inlärningshastigheten under träningen.
keras.optimizers.Adam()
Förlustfunktion (Categorical Crossentropy)
För flervalsklassificering används vanligtvis categorical crossentropy som förlustfunktion. Detta kan implementeras som:
keras.losses.CategoricalCrossentropy()
Metrik
Modellens prestanda övervakas med hjälp av metrik för klassificeringsuppgifter, såsom noggrannhet, precision, recall, etc. Dessa kan definieras som:
metrics = [
keras.metrics.Accuracy(),
keras.metrics.Precision(),
keras.metrics.Recall()
]
Kompilera
model.compile(optimizer='adam',
loss='categorical_crossentropy', # Or keras.losses.CategoricalCrossentropy()
metrics=metrics)
4. Träning av modellen
Träning av ett CNN innebär att mata indata till nätverket, beräkna förlusten och uppdatera vikterna med hjälp av backpropagation. Träningsprocessen styrs av följande centrala metoder:
- Träna modellen: metoden
fit()
används för att träna modellen. Denna metod tar emot träningsdata, antal epoker och batchstorlek. Det finns även en valfri valideringsdelning för att utvärdera modellens prestanda på osedda data under träningen:
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
- Batchstorlek och epoker: batchstorleken avgör antalet prover som behandlas innan modellens vikter uppdateras, och antalet epoker avser hur många gånger hela datasettet passerar genom modellen.
5. Utvärdering
Klassificeringsrapport
sklearn.metrics.classification_report()
jämför sanna och förutsagda värden från testdatamängden. Den inkluderar precision, recall och F1-poäng för varje klass. Men metoderna behöver endast klassetiketter, så glöm inte att konvertera tillbaka från vektorer ([0,0,1,0]
-> 2
):
y_pred = model.predict(x_test)
y_pred_classes = np.argmax(y_pred,axis = 1)
y_test_classes = np.argmax(y_test, axis = 1)
report = classification_report(y_test_classes, y_pred_classes, target_names=class_names)
print(report)
Utvärdera
När modellen är tränad utvärderas den på testdatamängden för att bedöma dess generaliseringsförmåga. Utvärderingen ger mätvärden, vilka nämndes i .compile()
-metoden. Utvärderingen utförs med .evaluate()
:
results = model.evaluate(x_test, y_test, verbose=2, return_dict=True)
Konfusionsmatris
För att få mer insikt i modellens prestanda kan vi visualisera konfusionsmatrisen, som visar sanna positiva, falska positiva, sanna negativa och falska negativa förutsägelser för varje klass. Konfusionsmatrisen kan beräknas med TensorFlow:
confusion_mtx = tf.math.confusion_matrix(y_test_classes, y_pred_classes)
Denna matris kan sedan visualiseras med hjälp av värmekartor för att observera hur väl modellen presterar för varje klass:
plt.figure(figsize=(12, 9))
c = sns.heatmap(confusion_mtx, annot=True, fmt='g')
c.set(xticklabels=class_names, yticklabels=class_names)
plt.show()
1. Ladda och förbehandla datasetet
- Importera CIFAR-10-datasetet från Keras;
- Normalisera pixelvärdena till intervallet
[0,1]
för bättre konvergens; - Konvertera klassetiketterna till
one-hot encoded
format för kategorisk klassificering.
2. Definiera CNN-modellen
Implementera en VGG-liknande CNN-arkitektur med följande nyckellager:
Konvolutionslager:
- Kärnstorlek:
3×3
; - Aktiveringsfunktion:
ReLU
; - Padding:
'same'
.
Poolinglager:
- Poolingtyp:
max pooling
; - Poolingstorlek:
2×2
.
Dropout-lager (Förhindrar överanpassning genom att slumpmässigt inaktivera neuroner):
- Dropout-nivå:
25%
.
Flatten-lager – konverterar 2D-funktionskartor till en 1D-vektor för klassificering.
Fullt anslutna lager – täta lager för slutlig klassificering, med ett relu- eller softmax-utgångslager.
Kompilera modellen med:
Adam optimizer
(för effektiv inlärning);Categorical cross-entropy
förlustfunktion (för flerkategoriklassificering);Accuracy metric
för att mäta prestanda (klasserna är balanserade, och du kan lägga till andra mått själv).
3. Träna modellen
- Ange parametrarna
epochs
ochbatch_size
för träningen (t.ex.epochs=20, batch_size=64
); - Ange parametern
validation_split
för att definiera procentandel av träningsdata som blir valideringsdata för att följa modellens prestanda på osedda bilder; - Spara träningshistoriken för att visualisera trender för noggrannhet och förlust.
4. Utvärdera och visualisera resultat
- Testa modellen på CIFAR-10 testdata och skriv ut noggrannheten;
- Plotta träningsförlust vs. valideringsförlust för att kontrollera överanpassning;
- Plotta träningsnoggrannhet vs. valideringsnoggrannhet för att säkerställa inlärningsprogression.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Can you provide a sample code for loading and preprocessing the CIFAR-10 dataset?
How do I implement the VGG-like CNN architecture in Keras?
What are the recommended values for epochs and batch size for training this model?
Awesome!
Completion rate improved to 3.45
Utmaning: Bygga ett CNN
Svep för att visa menyn
Konvolutionella neurala nätverk (CNN) används i stor utsträckning för bildklassificering tack vare deras förmåga att extrahera hierarkiska egenskaper. I denna uppgift kommer du att implementera och träna en VGG-liknande CNN med TensorFlow och Keras på CIFAR-10
-datasetet. Datasetet består av 60 000 bilder (32×32×3
) som tillhör 10 olika klasser, inklusive flygplan, bilar, fåglar, katter och fler.
Detta projekt vägleder dig genom inläsning av datasetet, förbehandling av bilder, definition av CNN-modellen, träning samt utvärdering av dess prestanda.

1. Datapreprocessering för CNN
Innan träning av en CNN är datapreprocessering ett avgörande steg för att säkerställa bättre prestanda och snabbare konvergens. Vanliga metoder för förbehandling inkluderar:
-
Normalisering: denna metod innebär att skala bilders pixelvärden från intervallet 0 till 255 till intervallet 0 till 1. Det implementeras ofta som
x_train / 255.0, x_test / 255.0
; -
One-hot-kodning: etiketter konverteras ofta till one-hot-kodade vektorer för klassificeringsuppgifter. Detta görs vanligtvis med funktionen
keras.utils.to_categorical
, som omvandlar heltalsetiketter (t.ex. 0, 1, 2, etc.) till en one-hot-kodad vektor, såsom[1, 0, 0, 0]
för ett klassificeringsproblem med 4 klasser.
2. Bygga CNN-arkitekturen
En CNN-arkitektur består av flera lager som utför olika uppgifter för att extrahera egenskaper och göra förutsägelser. Du kan implementera viktiga CNN-lager genom att:
Konvolutionellt lager (Conv2D)
keras.layers.Conv2D(filters, kernel_size, activation='relu', padding='same', input_shape=(height, width, channels))
Parametern input_shape
behöver du endast ange i inmatningslagret.
Poolningslager (MaxPooling2D)
keras.layers.MaxPooling2D(pool_size=(2, 2))
Flatten-lager
keras.layers.Flatten()
Dense-lager
layers.Dense(units=512, activation='relu')
layers.Dense(10, activation='softmax')
Det sista dense-lagret har vanligtvis ett antal enheter lika med antalet klasser och använder en softmax-aktiveringsfunktion för att ge en sannolikhetsfördelning över klasserna.
3. Modellkompilering
Efter att arkitekturen har definierats behöver modellen kompileras. Detta steg innebär att specificera förlustfunktion, optimerare och metrik som kommer att styra modellen under träningen. Följande metoder används ofta i CNN:
Optimerare (Adam)
Optimeraren justerar modellens vikter för att minimera förlustfunktionen. Adam-optimeraren är populär tack vare sin effektivitet och förmåga att anpassa inlärningshastigheten under träningen.
keras.optimizers.Adam()
Förlustfunktion (Categorical Crossentropy)
För flervalsklassificering används vanligtvis categorical crossentropy som förlustfunktion. Detta kan implementeras som:
keras.losses.CategoricalCrossentropy()
Metrik
Modellens prestanda övervakas med hjälp av metrik för klassificeringsuppgifter, såsom noggrannhet, precision, recall, etc. Dessa kan definieras som:
metrics = [
keras.metrics.Accuracy(),
keras.metrics.Precision(),
keras.metrics.Recall()
]
Kompilera
model.compile(optimizer='adam',
loss='categorical_crossentropy', # Or keras.losses.CategoricalCrossentropy()
metrics=metrics)
4. Träning av modellen
Träning av ett CNN innebär att mata indata till nätverket, beräkna förlusten och uppdatera vikterna med hjälp av backpropagation. Träningsprocessen styrs av följande centrala metoder:
- Träna modellen: metoden
fit()
används för att träna modellen. Denna metod tar emot träningsdata, antal epoker och batchstorlek. Det finns även en valfri valideringsdelning för att utvärdera modellens prestanda på osedda data under träningen:
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
- Batchstorlek och epoker: batchstorleken avgör antalet prover som behandlas innan modellens vikter uppdateras, och antalet epoker avser hur många gånger hela datasettet passerar genom modellen.
5. Utvärdering
Klassificeringsrapport
sklearn.metrics.classification_report()
jämför sanna och förutsagda värden från testdatamängden. Den inkluderar precision, recall och F1-poäng för varje klass. Men metoderna behöver endast klassetiketter, så glöm inte att konvertera tillbaka från vektorer ([0,0,1,0]
-> 2
):
y_pred = model.predict(x_test)
y_pred_classes = np.argmax(y_pred,axis = 1)
y_test_classes = np.argmax(y_test, axis = 1)
report = classification_report(y_test_classes, y_pred_classes, target_names=class_names)
print(report)
Utvärdera
När modellen är tränad utvärderas den på testdatamängden för att bedöma dess generaliseringsförmåga. Utvärderingen ger mätvärden, vilka nämndes i .compile()
-metoden. Utvärderingen utförs med .evaluate()
:
results = model.evaluate(x_test, y_test, verbose=2, return_dict=True)
Konfusionsmatris
För att få mer insikt i modellens prestanda kan vi visualisera konfusionsmatrisen, som visar sanna positiva, falska positiva, sanna negativa och falska negativa förutsägelser för varje klass. Konfusionsmatrisen kan beräknas med TensorFlow:
confusion_mtx = tf.math.confusion_matrix(y_test_classes, y_pred_classes)
Denna matris kan sedan visualiseras med hjälp av värmekartor för att observera hur väl modellen presterar för varje klass:
plt.figure(figsize=(12, 9))
c = sns.heatmap(confusion_mtx, annot=True, fmt='g')
c.set(xticklabels=class_names, yticklabels=class_names)
plt.show()
1. Ladda och förbehandla datasetet
- Importera CIFAR-10-datasetet från Keras;
- Normalisera pixelvärdena till intervallet
[0,1]
för bättre konvergens; - Konvertera klassetiketterna till
one-hot encoded
format för kategorisk klassificering.
2. Definiera CNN-modellen
Implementera en VGG-liknande CNN-arkitektur med följande nyckellager:
Konvolutionslager:
- Kärnstorlek:
3×3
; - Aktiveringsfunktion:
ReLU
; - Padding:
'same'
.
Poolinglager:
- Poolingtyp:
max pooling
; - Poolingstorlek:
2×2
.
Dropout-lager (Förhindrar överanpassning genom att slumpmässigt inaktivera neuroner):
- Dropout-nivå:
25%
.
Flatten-lager – konverterar 2D-funktionskartor till en 1D-vektor för klassificering.
Fullt anslutna lager – täta lager för slutlig klassificering, med ett relu- eller softmax-utgångslager.
Kompilera modellen med:
Adam optimizer
(för effektiv inlärning);Categorical cross-entropy
förlustfunktion (för flerkategoriklassificering);Accuracy metric
för att mäta prestanda (klasserna är balanserade, och du kan lägga till andra mått själv).
3. Träna modellen
- Ange parametrarna
epochs
ochbatch_size
för träningen (t.ex.epochs=20, batch_size=64
); - Ange parametern
validation_split
för att definiera procentandel av träningsdata som blir valideringsdata för att följa modellens prestanda på osedda bilder; - Spara träningshistoriken för att visualisera trender för noggrannhet och förlust.
4. Utvärdera och visualisera resultat
- Testa modellen på CIFAR-10 testdata och skriv ut noggrannheten;
- Plotta träningsförlust vs. valideringsförlust för att kontrollera överanpassning;
- Plotta träningsnoggrannhet vs. valideringsnoggrannhet för att säkerställa inlärningsprogression.
Tack för dina kommentarer!