Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Uitdaging: Het Bouwen van een CNN | Convolutionele Neurale Netwerken
Essentiële Computervisie
course content

Cursusinhoud

Essentiële Computervisie

Essentiële Computervisie

1. Introductie tot Computer Vision
2. Beeldverwerking met OpenCV
3. Convolutionele Neurale Netwerken
4. Objectdetectie
5. Overzicht van Geavanceerde Onderwerpen

book
Uitdaging: Het Bouwen van een CNN

Convolutionele neurale netwerken (CNN's) worden veel gebruikt bij beeldclassificatie vanwege hun vermogen om hiërarchische kenmerken te extraheren. In deze opdracht implementeer en train je een VGG-achtige CNN met TensorFlow en Keras op de CIFAR-10 dataset. De dataset bestaat uit 60.000 afbeeldingen (32×32×3) die behoren tot 10 verschillende klassen, waaronder vliegtuigen, auto's, vogels, katten en meer.

Dit project begeleidt je bij het laden van de dataset, het preprocessen van de afbeeldingen, het definiëren van het CNN-model, het trainen ervan en het evalueren van de prestaties.

1. Gegevensvoorverwerking voor CNN's

Voor het trainen van een CNN is het preprocessen van de gegevens een cruciale stap om betere prestaties en snellere convergentie te waarborgen. Veelgebruikte preprocessingsmethoden zijn:

  • Normalisatie: deze methode houdt in dat de pixelwaarden van afbeeldingen worden geschaald van een bereik tussen 0 en 255 naar een bereik tussen 0 en 1. Dit wordt vaak geïmplementeerd als x_train / 255.0, x_test / 255.0;

  • One-hot encoding: labels worden vaak omgezet in one-hot gecodeerde vectoren voor classificatietaken. Dit gebeurt doorgaans met de functie keras.utils.to_categorical, die gehele labels (bijv. 0, 1, 2, enz.) omzet in een one-hot gecodeerde vector, zoals [1, 0, 0, 0] voor een classificatieprobleem met 4 klassen.

2. Het bouwen van de CNN-architectuur

Een CNN-architectuur bestaat uit meerdere lagen die verschillende taken uitvoeren om kenmerken te extraheren en voorspellingen te doen. Je kunt belangrijke CNN-lagen implementeren door:

Convolutionele laag (Conv2D)

Opmerking

input_shape parameter, hoeft u alleen op te geven in de invoerlaag.

Poolinglaag (MaxPooling2D)

Flatten-laag

Dense-laag

Opmerking

De laatste dense-laag heeft doorgaans een aantal units gelijk aan het aantal klassen en gebruikt een softmax activatiefunctie om een waarschijnlijkheidsverdeling over de klassen te genereren.

3. Modelcompilatie

Na het definiëren van de architectuur moet het model worden gecompileerd. In deze stap worden de verliesfunctie, optimizer en metriek gespecificeerd die het model tijdens het trainen zullen sturen. De volgende methoden worden vaak gebruikt bij CNN's:

Optimizer (Adam)

De optimizer past de gewichten van het model aan om de verliesfunctie te minimaliseren. De Adam-optimizer is populair vanwege zijn efficiëntie en het vermogen om het leerproces tijdens de training aan te passen.

Verliesfunctie (Categorical Crossentropy)

Voor multi-class classificatie wordt doorgaans categorical crossentropy gebruikt als verliesfunctie. Dit kan als volgt worden geïmplementeerd:

Metrieken

De modelprestaties worden gevolgd met behulp van metriekwaarden voor classificatietaken, zoals nauwkeurigheid, precisie, recall, enzovoort. Deze kunnen als volgt worden gedefinieerd:

Compileren

4. Het trainen van het model

Het trainen van een CNN omvat het aanbieden van de invoergegevens aan het netwerk, het berekenen van het verlies en het bijwerken van de gewichten met behulp van backpropagation. Het trainingsproces wordt aangestuurd door de volgende kernmethoden:

  • Model trainen: de fit()-methode wordt gebruikt om het model te trainen. Deze methode neemt de trainingsgegevens, het aantal epochs en de batchgrootte als invoer. Er is ook een optionele validatiesplit om de prestaties van het model op niet eerder geziene gegevens tijdens de training te evalueren:

  • Batchgrootte en epochs: de batchgrootte bepaalt het aantal voorbeelden dat wordt verwerkt voordat de modelgewichten worden bijgewerkt, en het aantal epochs verwijst naar hoe vaak de volledige dataset door het model wordt gehaald.

5. Evaluatie

Classificatierapport

sklearn.metrics.classification_report() vergelijkt ware en voorspelde waarden uit de testdataset. Het bevat precisie, recall en F1-score voor elke klasse. De methoden vereisen echter alleen klassenlabels, dus vergeet niet deze terug te converteren van vectoren ([0,0,1,0] -> 2):

Evalueren

Zodra het model is getraind, wordt het geëvalueerd op de testdataset om het generalisatievermogen te beoordelen. De evaluatie levert metriek op, die werden genoemd in de .compile()-methode. De evaluatie wordt uitgevoerd met behulp van .evaluate():

Confusiematrix

Om meer inzicht te krijgen in de prestaties van het model, kunnen we de confusiematrix visualiseren, die de true positive, false positive, true negative en false negative voorspellingen voor elke klasse toont. De confusiematrix kan worden berekend met TensorFlow:

Deze matrix kan vervolgens worden gevisualiseerd met behulp van heatmaps om te observeren hoe goed het model presteert op elke klasse:

1. Dataset laden en preprocessen

  • Importeer de CIFAR-10 dataset vanuit Keras;

  • Normaliseer de pixelwaarden naar het bereik [0,1] voor betere convergentie;

  • Zet de klasse-labels om naar one-hot encoded formaat voor categorische classificatie.

2. Definieer het CNN-model

Implementeer een VGG-achtige CNN-architectuur met de volgende kernlagen: VGG like architecture

Convolutionele lagen:

  • Kernelgrootte: 3×3;

  • Activatiefunctie: ReLU;

  • Padding: 'same'.

Pooling-lagen:

  • Poolingtype: max pooling;

  • Poolinggrootte: 2×2.

Dropout-lagen (Voorkom overfitting door willekeurig neuronen uit te schakelen):

  • Dropout-percentage: 25%.

Flatten-laag - zet 2D feature maps om naar een 1D vector voor classificatie.

Volledig verbonden lagen - dense lagen voor uiteindelijke classificatie, met een relu- of softmax-uitvoerlaag.

Compileer het model met:

  • Adam optimizer (voor efficiënte training);

  • Categorical cross-entropy verliesfunctie (voor multi-class classificatie);

  • Accuracy metric om prestaties te meten (klassen zijn gebalanceerd, en je kunt zelf andere metrics toevoegen).

3. Train het model

  • Specificeer epochs en batch_size parameters voor training (bijv. epochs=20, batch_size=64);

  • Specificeer de validation_split parameter om het percentage trainingsdata dat validatie wordt te bepalen, zodat de modelprestaties op ongeziene afbeeldingen gevolgd kunnen worden;

  • Sla de trainingsgeschiedenis op om nauwkeurigheid en verliestrends te visualiseren.

4. Evalueer en visualiseer resultaten

  • Test het model op CIFAR-10 testdata en toon de nauwkeurigheid;

  • Plot trainingsverlies versus validatieverlies om overfitting te controleren;

  • Plot trainingsnauwkeurigheid versus validatienauwkeurigheid om de leervoortgang te waarborgen.

COLAB CNN PROJECT

question-icon

Voer de delen van de sleutel in (Je hebt deze ontvangen nadat je het project had voltooid)

1.  2.  3.  4.  5.
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 7

Vraag AI

expand
ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

course content

Cursusinhoud

Essentiële Computervisie

Essentiële Computervisie

1. Introductie tot Computer Vision
2. Beeldverwerking met OpenCV
3. Convolutionele Neurale Netwerken
4. Objectdetectie
5. Overzicht van Geavanceerde Onderwerpen

book
Uitdaging: Het Bouwen van een CNN

Convolutionele neurale netwerken (CNN's) worden veel gebruikt bij beeldclassificatie vanwege hun vermogen om hiërarchische kenmerken te extraheren. In deze opdracht implementeer en train je een VGG-achtige CNN met TensorFlow en Keras op de CIFAR-10 dataset. De dataset bestaat uit 60.000 afbeeldingen (32×32×3) die behoren tot 10 verschillende klassen, waaronder vliegtuigen, auto's, vogels, katten en meer.

Dit project begeleidt je bij het laden van de dataset, het preprocessen van de afbeeldingen, het definiëren van het CNN-model, het trainen ervan en het evalueren van de prestaties.

1. Gegevensvoorverwerking voor CNN's

Voor het trainen van een CNN is het preprocessen van de gegevens een cruciale stap om betere prestaties en snellere convergentie te waarborgen. Veelgebruikte preprocessingsmethoden zijn:

  • Normalisatie: deze methode houdt in dat de pixelwaarden van afbeeldingen worden geschaald van een bereik tussen 0 en 255 naar een bereik tussen 0 en 1. Dit wordt vaak geïmplementeerd als x_train / 255.0, x_test / 255.0;

  • One-hot encoding: labels worden vaak omgezet in one-hot gecodeerde vectoren voor classificatietaken. Dit gebeurt doorgaans met de functie keras.utils.to_categorical, die gehele labels (bijv. 0, 1, 2, enz.) omzet in een one-hot gecodeerde vector, zoals [1, 0, 0, 0] voor een classificatieprobleem met 4 klassen.

2. Het bouwen van de CNN-architectuur

Een CNN-architectuur bestaat uit meerdere lagen die verschillende taken uitvoeren om kenmerken te extraheren en voorspellingen te doen. Je kunt belangrijke CNN-lagen implementeren door:

Convolutionele laag (Conv2D)

Opmerking

input_shape parameter, hoeft u alleen op te geven in de invoerlaag.

Poolinglaag (MaxPooling2D)

Flatten-laag

Dense-laag

Opmerking

De laatste dense-laag heeft doorgaans een aantal units gelijk aan het aantal klassen en gebruikt een softmax activatiefunctie om een waarschijnlijkheidsverdeling over de klassen te genereren.

3. Modelcompilatie

Na het definiëren van de architectuur moet het model worden gecompileerd. In deze stap worden de verliesfunctie, optimizer en metriek gespecificeerd die het model tijdens het trainen zullen sturen. De volgende methoden worden vaak gebruikt bij CNN's:

Optimizer (Adam)

De optimizer past de gewichten van het model aan om de verliesfunctie te minimaliseren. De Adam-optimizer is populair vanwege zijn efficiëntie en het vermogen om het leerproces tijdens de training aan te passen.

Verliesfunctie (Categorical Crossentropy)

Voor multi-class classificatie wordt doorgaans categorical crossentropy gebruikt als verliesfunctie. Dit kan als volgt worden geïmplementeerd:

Metrieken

De modelprestaties worden gevolgd met behulp van metriekwaarden voor classificatietaken, zoals nauwkeurigheid, precisie, recall, enzovoort. Deze kunnen als volgt worden gedefinieerd:

Compileren

4. Het trainen van het model

Het trainen van een CNN omvat het aanbieden van de invoergegevens aan het netwerk, het berekenen van het verlies en het bijwerken van de gewichten met behulp van backpropagation. Het trainingsproces wordt aangestuurd door de volgende kernmethoden:

  • Model trainen: de fit()-methode wordt gebruikt om het model te trainen. Deze methode neemt de trainingsgegevens, het aantal epochs en de batchgrootte als invoer. Er is ook een optionele validatiesplit om de prestaties van het model op niet eerder geziene gegevens tijdens de training te evalueren:

  • Batchgrootte en epochs: de batchgrootte bepaalt het aantal voorbeelden dat wordt verwerkt voordat de modelgewichten worden bijgewerkt, en het aantal epochs verwijst naar hoe vaak de volledige dataset door het model wordt gehaald.

5. Evaluatie

Classificatierapport

sklearn.metrics.classification_report() vergelijkt ware en voorspelde waarden uit de testdataset. Het bevat precisie, recall en F1-score voor elke klasse. De methoden vereisen echter alleen klassenlabels, dus vergeet niet deze terug te converteren van vectoren ([0,0,1,0] -> 2):

Evalueren

Zodra het model is getraind, wordt het geëvalueerd op de testdataset om het generalisatievermogen te beoordelen. De evaluatie levert metriek op, die werden genoemd in de .compile()-methode. De evaluatie wordt uitgevoerd met behulp van .evaluate():

Confusiematrix

Om meer inzicht te krijgen in de prestaties van het model, kunnen we de confusiematrix visualiseren, die de true positive, false positive, true negative en false negative voorspellingen voor elke klasse toont. De confusiematrix kan worden berekend met TensorFlow:

Deze matrix kan vervolgens worden gevisualiseerd met behulp van heatmaps om te observeren hoe goed het model presteert op elke klasse:

1. Dataset laden en preprocessen

  • Importeer de CIFAR-10 dataset vanuit Keras;

  • Normaliseer de pixelwaarden naar het bereik [0,1] voor betere convergentie;

  • Zet de klasse-labels om naar one-hot encoded formaat voor categorische classificatie.

2. Definieer het CNN-model

Implementeer een VGG-achtige CNN-architectuur met de volgende kernlagen: VGG like architecture

Convolutionele lagen:

  • Kernelgrootte: 3×3;

  • Activatiefunctie: ReLU;

  • Padding: 'same'.

Pooling-lagen:

  • Poolingtype: max pooling;

  • Poolinggrootte: 2×2.

Dropout-lagen (Voorkom overfitting door willekeurig neuronen uit te schakelen):

  • Dropout-percentage: 25%.

Flatten-laag - zet 2D feature maps om naar een 1D vector voor classificatie.

Volledig verbonden lagen - dense lagen voor uiteindelijke classificatie, met een relu- of softmax-uitvoerlaag.

Compileer het model met:

  • Adam optimizer (voor efficiënte training);

  • Categorical cross-entropy verliesfunctie (voor multi-class classificatie);

  • Accuracy metric om prestaties te meten (klassen zijn gebalanceerd, en je kunt zelf andere metrics toevoegen).

3. Train het model

  • Specificeer epochs en batch_size parameters voor training (bijv. epochs=20, batch_size=64);

  • Specificeer de validation_split parameter om het percentage trainingsdata dat validatie wordt te bepalen, zodat de modelprestaties op ongeziene afbeeldingen gevolgd kunnen worden;

  • Sla de trainingsgeschiedenis op om nauwkeurigheid en verliestrends te visualiseren.

4. Evalueer en visualiseer resultaten

  • Test het model op CIFAR-10 testdata en toon de nauwkeurigheid;

  • Plot trainingsverlies versus validatieverlies om overfitting te controleren;

  • Plot trainingsnauwkeurigheid versus validatienauwkeurigheid om de leervoortgang te waarborgen.

COLAB CNN PROJECT

question-icon

Voer de delen van de sleutel in (Je hebt deze ontvangen nadat je het project had voltooid)

1.  2.  3.  4.  5.
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 7
Onze excuses dat er iets mis is gegaan. Wat is er gebeurd?
some-alt