Haaste: CNN:n Rakentaminen
Konvoluutiohermoverkot (CNN:t) ovat laajasti käytössä kuvien luokittelussa niiden kyvyn ansiosta poimia hierarkkisia piirteitä. Tässä tehtävässä toteutetaan ja koulutetaan VGG-tyyppinen CNN TensorFlow'n ja Kerasin avulla CIFAR-10
-aineistolla. Aineisto sisältää 60 000 kuvaa (32×32×3
), jotka kuuluvat 10 eri luokkaan, kuten lentokoneet, autot, linnut, kissat ja muita.
Tämä projekti ohjaa sinut läpi aineiston lataamisen, kuvien esikäsittelyn, CNN-mallin määrittelyn, sen kouluttamisen ja suorituskyvyn arvioinnin.

1. Datan esikäsittely CNN:ille
Ennen CNN:n kouluttamista datan esikäsittely on olennainen vaihe paremman suorituskyvyn ja nopeamman konvergenssin varmistamiseksi. Yleisiä esikäsittelymenetelmiä ovat:
-
Normalisointi: tässä menetelmässä kuvien pikseliarvot skaalataan väliltä 0–255 välille 0–1. Tämä toteutetaan usein muodossa
x_train / 255.0, x_test / 255.0
; -
One-hot-koodaus: luokittelutehtävissä luokat muunnetaan usein one-hot-koodatuiksi vektoreiksi. Tämä tehdään tyypillisesti
keras.utils.to_categorical
-funktiolla, joka muuntaa kokonaislukuluokat (esim. 0, 1, 2, jne.) one-hot-koodatuksi vektoriksi, kuten[1, 0, 0, 0]
4-luokan luokitteluongelmassa.
2. CNN-arkkitehtuurin rakentaminen
CNN-arkkitehtuuri koostuu useista kerroksista, jotka suorittavat erilaisia tehtäviä piirteiden erottamiseksi ja ennusteiden tekemiseksi. Keskeiset CNN-kerrokset voidaan toteuttaa seuraavasti:
Konvoluutiokerros (Conv2D)
keras.layers.Conv2D(filters, kernel_size, activation='relu', padding='same', input_shape=(height, width, channels))
input_shape
-parametri tulee määrittää vain syötekerroksessa.
Pooling-kerros (MaxPooling2D)
keras.layers.MaxPooling2D(pool_size=(2, 2))
Tasoituskerros
keras.layers.Flatten()
Tiheä kerros
layers.Dense(units=512, activation='relu')
layers.Dense(10, activation='softmax')
Viimeisessä tiheässä kerroksessa yksiköiden määrä on tyypillisesti yhtä suuri kuin luokkien määrä ja siinä käytetään softmax-aktivointifunktiota tuottamaan todennäköisyysjakauma luokkien välillä.
3. Mallin kokoaminen
Arkkitehtuurin määrittämisen jälkeen malli täytyy koota. Tässä vaiheessa määritellään tappiollinen funktio, optimointialgoritmi ja metriikat, jotka ohjaavat mallin oppimista koulutuksen aikana. Seuraavia menetelmiä käytetään yleisesti konvoluutiohermoverkoissa:
Optimointialgoritmi (Adam)
Optimointialgoritmi säätää mallin painoja minimoidakseen tappiollisen funktion. Adam-optimointialgoritmi on suosittu tehokkuutensa ja kyvynsä mukauttaa oppimisnopeutta koulutuksen aikana ansiosta.
keras.optimizers.Adam()
Tappiollinen funktio (Categorical Crossentropy)
Moniluokkaluokittelussa käytetään tyypillisesti tappiollisena funktiona kategorista ristientropiaa. Tämä voidaan toteuttaa seuraavasti:
keras.losses.CategoricalCrossentropy()
Metriikat
Mallin suorituskykyä seurataan luokittelutehtävissä metriikoilla, kuten tarkkuus, precision ja recall. Nämä voidaan määritellä seuraavasti:
metrics = [
keras.metrics.Accuracy(),
keras.metrics.Precision(),
keras.metrics.Recall()
]
Kokoaminen
model.compile(optimizer='adam',
loss='categorical_crossentropy', # Or keras.losses.CategoricalCrossentropy()
metrics=metrics)
4. Mallin koulutus
Konvoluutiohermoverkon koulutus sisältää syötteen syöttämisen verkkoon, tappion laskemisen ja painojen päivittämisen takaisinkytkennän avulla. Koulutusprosessia ohjataan seuraavilla keskeisillä menetelmillä:
- Mallin sovitus:
fit()
-metodia käytetään mallin kouluttamiseen. Tämä metodi ottaa syötteenä koulutusdatan, epochien määrän ja eräkoolla. Lisäksi mukana on valinnainen validointijako, jolla arvioidaan mallin suorituskykyä näkemättömällä datalla koulutuksen aikana:
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
- Eräkoko ja epochit: eräkoko määrittää kuinka monta näytettä käsitellään ennen mallin painojen päivitystä, ja epochien määrä viittaa siihen, kuinka monta kertaa koko aineisto käydään läpi mallissa.
5. Arviointi
Luokitteluraportti
sklearn.metrics.classification_report()
vertaa todellisia ja ennustettuja arvoja testidatasta. Se sisältää precision-, recall- ja F1-arvot jokaiselle luokalle. Menetelmät vaativat vain luokkamerkinnät, joten muista muuntaa ne takaisin vektoreista ([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)
Arviointi
Kun malli on koulutettu, sitä arvioidaan testidatalla sen yleistyskyvyn mittaamiseksi. Arviointi antaa mittareita, jotka mainittiin .compile()
-menetelmässä. Arviointi suoritetaan käyttämällä .evaluate()
:
results = model.evaluate(x_test, y_test, verbose=2, return_dict=True)
Sekoitusmatriisi
Lisätietojen saamiseksi mallin suorituskyvystä voidaan visualisoida sekoitusmatriisi, joka näyttää todelliset positiiviset, väärät positiiviset, todelliset negatiiviset ja väärät negatiiviset ennusteet jokaiselle luokalle. Sekoitusmatriisi voidaan laskea TensorFlow'lla:
confusion_mtx = tf.math.confusion_matrix(y_test_classes, y_pred_classes)
Tämä matriisi voidaan visualisoida lämpökarttojen avulla, jotta voidaan tarkastella, kuinka hyvin malli suoriutuu jokaisesta luokasta:
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. Lataa ja esikäsittele aineisto
- Tuo CIFAR-10-aineisto Keras-kirjastosta;
- Normalisoi pikseliarvot välille
[0,1]
paremman konvergenssin saavuttamiseksi; - Muunna luokkamerkinnät
one-hot encoded
-muotoon kategorista luokittelua varten.
2. Määrittele CNN-malli
Toteuta VGG-tyylinen CNN-arkkitehtuuri seuraavilla keskeisillä kerroksilla:
Konvoluutiokerrokset:
- Ytimen koko:
3×3
; - Aktivointifunktio:
ReLU
; - Täydennys:
'same'
.
Pooling-kerrokset:
- Pooling-tyyppi:
max pooling
; - Pooling-koko:
2×2
.
Dropout-kerrokset (Ylisuoriutumisen ehkäisy satunnaisesti poistamalla neuroneita):
- Dropout-arvo:
25%
.
Flatten-kerros – muuntaa kaksiulotteiset piirrekuvat yksidimensioiseksi vektoriksi luokittelua varten.
Täysin yhdistetyt kerrokset – tiheät kerrokset lopullista luokittelua varten, relu- tai softmax-lähtökerroksella.
Käännä malli käyttäen:
Adam optimizer
(tehokkaaseen oppimiseen);Categorical cross-entropy
-tappiofunktio (moniluokkaluokitteluun);Accuracy metric
suorituskyvyn mittaamiseen (luokat ovat tasapainossa, ja voit lisätä muita mittareita itse).
3. Kouluta malli
- Määritä
epochs
jabatch_size
-parametrit koulutukseen (esim.epochs=20, batch_size=64
); - Määritä
validation_split
-parametri, joka määrittää kuinka suuri osa koulutusaineistosta toimii validointiaineistona mallin suorituskyvyn seuraamiseksi näkemättömillä kuvilla; - Tallenna koulutushistoria, jotta voidaan visualisoida tarkkuuden ja tappion kehitys.
4. Arvioi ja visualisoi tulokset
- Testaa malli CIFAR-10-testausaineistolla ja tulosta tarkkuus;
- Piirrä koulutustappio vs. validointitappio ylisuoriutumisen tarkistamiseksi;
- Piirrä koulutustarkkuus vs. validointitarkkuus oppimisen etenemisen varmistamiseksi.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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
Haaste: CNN:n Rakentaminen
Pyyhkäise näyttääksesi valikon
Konvoluutiohermoverkot (CNN:t) ovat laajasti käytössä kuvien luokittelussa niiden kyvyn ansiosta poimia hierarkkisia piirteitä. Tässä tehtävässä toteutetaan ja koulutetaan VGG-tyyppinen CNN TensorFlow'n ja Kerasin avulla CIFAR-10
-aineistolla. Aineisto sisältää 60 000 kuvaa (32×32×3
), jotka kuuluvat 10 eri luokkaan, kuten lentokoneet, autot, linnut, kissat ja muita.
Tämä projekti ohjaa sinut läpi aineiston lataamisen, kuvien esikäsittelyn, CNN-mallin määrittelyn, sen kouluttamisen ja suorituskyvyn arvioinnin.

1. Datan esikäsittely CNN:ille
Ennen CNN:n kouluttamista datan esikäsittely on olennainen vaihe paremman suorituskyvyn ja nopeamman konvergenssin varmistamiseksi. Yleisiä esikäsittelymenetelmiä ovat:
-
Normalisointi: tässä menetelmässä kuvien pikseliarvot skaalataan väliltä 0–255 välille 0–1. Tämä toteutetaan usein muodossa
x_train / 255.0, x_test / 255.0
; -
One-hot-koodaus: luokittelutehtävissä luokat muunnetaan usein one-hot-koodatuiksi vektoreiksi. Tämä tehdään tyypillisesti
keras.utils.to_categorical
-funktiolla, joka muuntaa kokonaislukuluokat (esim. 0, 1, 2, jne.) one-hot-koodatuksi vektoriksi, kuten[1, 0, 0, 0]
4-luokan luokitteluongelmassa.
2. CNN-arkkitehtuurin rakentaminen
CNN-arkkitehtuuri koostuu useista kerroksista, jotka suorittavat erilaisia tehtäviä piirteiden erottamiseksi ja ennusteiden tekemiseksi. Keskeiset CNN-kerrokset voidaan toteuttaa seuraavasti:
Konvoluutiokerros (Conv2D)
keras.layers.Conv2D(filters, kernel_size, activation='relu', padding='same', input_shape=(height, width, channels))
input_shape
-parametri tulee määrittää vain syötekerroksessa.
Pooling-kerros (MaxPooling2D)
keras.layers.MaxPooling2D(pool_size=(2, 2))
Tasoituskerros
keras.layers.Flatten()
Tiheä kerros
layers.Dense(units=512, activation='relu')
layers.Dense(10, activation='softmax')
Viimeisessä tiheässä kerroksessa yksiköiden määrä on tyypillisesti yhtä suuri kuin luokkien määrä ja siinä käytetään softmax-aktivointifunktiota tuottamaan todennäköisyysjakauma luokkien välillä.
3. Mallin kokoaminen
Arkkitehtuurin määrittämisen jälkeen malli täytyy koota. Tässä vaiheessa määritellään tappiollinen funktio, optimointialgoritmi ja metriikat, jotka ohjaavat mallin oppimista koulutuksen aikana. Seuraavia menetelmiä käytetään yleisesti konvoluutiohermoverkoissa:
Optimointialgoritmi (Adam)
Optimointialgoritmi säätää mallin painoja minimoidakseen tappiollisen funktion. Adam-optimointialgoritmi on suosittu tehokkuutensa ja kyvynsä mukauttaa oppimisnopeutta koulutuksen aikana ansiosta.
keras.optimizers.Adam()
Tappiollinen funktio (Categorical Crossentropy)
Moniluokkaluokittelussa käytetään tyypillisesti tappiollisena funktiona kategorista ristientropiaa. Tämä voidaan toteuttaa seuraavasti:
keras.losses.CategoricalCrossentropy()
Metriikat
Mallin suorituskykyä seurataan luokittelutehtävissä metriikoilla, kuten tarkkuus, precision ja recall. Nämä voidaan määritellä seuraavasti:
metrics = [
keras.metrics.Accuracy(),
keras.metrics.Precision(),
keras.metrics.Recall()
]
Kokoaminen
model.compile(optimizer='adam',
loss='categorical_crossentropy', # Or keras.losses.CategoricalCrossentropy()
metrics=metrics)
4. Mallin koulutus
Konvoluutiohermoverkon koulutus sisältää syötteen syöttämisen verkkoon, tappion laskemisen ja painojen päivittämisen takaisinkytkennän avulla. Koulutusprosessia ohjataan seuraavilla keskeisillä menetelmillä:
- Mallin sovitus:
fit()
-metodia käytetään mallin kouluttamiseen. Tämä metodi ottaa syötteenä koulutusdatan, epochien määrän ja eräkoolla. Lisäksi mukana on valinnainen validointijako, jolla arvioidaan mallin suorituskykyä näkemättömällä datalla koulutuksen aikana:
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
- Eräkoko ja epochit: eräkoko määrittää kuinka monta näytettä käsitellään ennen mallin painojen päivitystä, ja epochien määrä viittaa siihen, kuinka monta kertaa koko aineisto käydään läpi mallissa.
5. Arviointi
Luokitteluraportti
sklearn.metrics.classification_report()
vertaa todellisia ja ennustettuja arvoja testidatasta. Se sisältää precision-, recall- ja F1-arvot jokaiselle luokalle. Menetelmät vaativat vain luokkamerkinnät, joten muista muuntaa ne takaisin vektoreista ([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)
Arviointi
Kun malli on koulutettu, sitä arvioidaan testidatalla sen yleistyskyvyn mittaamiseksi. Arviointi antaa mittareita, jotka mainittiin .compile()
-menetelmässä. Arviointi suoritetaan käyttämällä .evaluate()
:
results = model.evaluate(x_test, y_test, verbose=2, return_dict=True)
Sekoitusmatriisi
Lisätietojen saamiseksi mallin suorituskyvystä voidaan visualisoida sekoitusmatriisi, joka näyttää todelliset positiiviset, väärät positiiviset, todelliset negatiiviset ja väärät negatiiviset ennusteet jokaiselle luokalle. Sekoitusmatriisi voidaan laskea TensorFlow'lla:
confusion_mtx = tf.math.confusion_matrix(y_test_classes, y_pred_classes)
Tämä matriisi voidaan visualisoida lämpökarttojen avulla, jotta voidaan tarkastella, kuinka hyvin malli suoriutuu jokaisesta luokasta:
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. Lataa ja esikäsittele aineisto
- Tuo CIFAR-10-aineisto Keras-kirjastosta;
- Normalisoi pikseliarvot välille
[0,1]
paremman konvergenssin saavuttamiseksi; - Muunna luokkamerkinnät
one-hot encoded
-muotoon kategorista luokittelua varten.
2. Määrittele CNN-malli
Toteuta VGG-tyylinen CNN-arkkitehtuuri seuraavilla keskeisillä kerroksilla:
Konvoluutiokerrokset:
- Ytimen koko:
3×3
; - Aktivointifunktio:
ReLU
; - Täydennys:
'same'
.
Pooling-kerrokset:
- Pooling-tyyppi:
max pooling
; - Pooling-koko:
2×2
.
Dropout-kerrokset (Ylisuoriutumisen ehkäisy satunnaisesti poistamalla neuroneita):
- Dropout-arvo:
25%
.
Flatten-kerros – muuntaa kaksiulotteiset piirrekuvat yksidimensioiseksi vektoriksi luokittelua varten.
Täysin yhdistetyt kerrokset – tiheät kerrokset lopullista luokittelua varten, relu- tai softmax-lähtökerroksella.
Käännä malli käyttäen:
Adam optimizer
(tehokkaaseen oppimiseen);Categorical cross-entropy
-tappiofunktio (moniluokkaluokitteluun);Accuracy metric
suorituskyvyn mittaamiseen (luokat ovat tasapainossa, ja voit lisätä muita mittareita itse).
3. Kouluta malli
- Määritä
epochs
jabatch_size
-parametrit koulutukseen (esim.epochs=20, batch_size=64
); - Määritä
validation_split
-parametri, joka määrittää kuinka suuri osa koulutusaineistosta toimii validointiaineistona mallin suorituskyvyn seuraamiseksi näkemättömillä kuvilla; - Tallenna koulutushistoria, jotta voidaan visualisoida tarkkuuden ja tappion kehitys.
4. Arvioi ja visualisoi tulokset
- Testaa malli CIFAR-10-testausaineistolla ja tulosta tarkkuus;
- Piirrä koulutustappio vs. validointitappio ylisuoriutumisen tarkistamiseksi;
- Piirrä koulutustarkkuus vs. validointitarkkuus oppimisen etenemisen varmistamiseksi.
Kiitos palautteestasi!