Kurssisisältö
Konenäön Perusteet
Konenäön Perusteet
Haaste: CNN:n Rakentaminen
Konvoluutiohermoverkot (CNN:t) ovat laajasti käytössä kuvien luokittelussa niiden kyvyn vuoksi erotella hierarkkisia piirteitä. Tässä tehtävässä toteutat ja koulutat VGG-tyyppisen CNN:n käyttäen TensorFlow'ta ja Kerasia CIFAR-10
-aineistolla. Aineisto koostuu 60 000 kuvasta (32×32×3
), jotka kuuluvat 10 eri luokkaan, kuten lentokoneet, autot, linnut, kissat ja muita.
Tämä projekti ohjaa sinua aineiston lataamisessa, kuvien esikäsittelyssä, CNN-mallin määrittelyssä, sen kouluttamisessa ja suorituskyvyn arvioinnissa.
1. Datan esikäsittely CNN:lle
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: luokat muunnetaan usein one-hot-koodatuiksi vektoreiksi luokittelutehtävissä. 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 luokittelutehtävässä.
2. CNN-arkkitehtuurin rakentaminen
CNN-arkkitehtuuri koostuu useista kerroksista, jotka suorittavat erilaisia tehtäviä piirteiden erotteluun ja ennusteiden tekemiseen. Voit toteuttaa keskeiset CNN-kerrokset seuraavasti:
Konvoluutiokerros (Conv2D)
Huom
input_shape
-parametri tulee määrittää vain syötetason kohdalla.
Pooling-kerros (MaxPooling2D)
Tasoituskerros (Flatten Layer)
Tiheä kerros
Huomio
Lopullisessa tiheässä kerroksessa yksiköiden määrä on 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äärittelyn jälkeen malli täytyy koota. Tässä vaiheessa määritellään tappiollinen funktio, optimointialgoritmi ja metriikat, jotka ohjaavat mallia 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.
Häviöfunktio (Kategorinen ristiinentropia)
Moniluokkaluokittelussa käytetään tyypillisesti kategorista ristiinentropiaa häviöfunktiona. Tämä voidaan toteuttaa seuraavasti:
Mittarit
Mallin suorituskykyä seurataan luokittelutehtävien mittareilla, kuten tarkkuus, precision, recall jne. Nämä voidaan määritellä seuraavasti:
Kokoaminen
4. Mallin kouluttaminen
CNN:n kouluttaminen sisältää syötteen antamisen verkolle, tappion laskemisen ja painojen päivittämisen takaisinkytkennän avulla. Koulutusprosessia ohjaavat seuraavat keskeiset menetelmät:
Mallin sovittaminen:
fit()
-metodia käytetään mallin kouluttamiseen. Tämä metodi ottaa syötteenä koulutusdatan, epochien määrän ja eräkoon. Lisäksi siinä on valinnainen validointijako, jonka avulla arvioidaan mallin suorituskykyä koulutuksen aikana näkemättömällä datalla:
Eräkoko ja epochit: eräkoko määrittää kuinka monta näytettä käsitellään ennen mallin painojen päivittämistä, ja epochien määrä viittaa siihen, kuinka monta kertaa koko aineisto syötetään mallin läpi.
5. Arviointi
Luokitteluraportti
sklearn.metrics.classification_report()
vertaa todellisia ja ennustettuja arvoja testiaineistosta. Se sisältää precision-, recall- ja F1-arvot jokaiselle luokalle. Menetelmät vaativat kuitenkin vain luokkatunnisteet, joten muista muuntaa ne takaisin vektoreista ([0,0,1,0]
-> 2
):
Arviointi
Kun malli on koulutettu, sitä arvioidaan testiaineistolla sen yleistämiskyvyn mittaamiseksi. Arviointi tuottaa metriikoita, jotka mainittiin .compile()
-metodissa. Arviointi suoritetaan käyttämällä .evaluate()
:
Sekamatrisi
Lisätietojen saamiseksi mallin suorituskyvystä voidaan visualisoida sekamatrisi, joka näyttää oikeat positiiviset, väärät positiiviset, oikeat negatiiviset ja väärät negatiiviset ennusteet jokaiselle luokalle. Sekamatrisi voidaan laskea TensorFlow'n avulla:
Tämä matriisi voidaan visualisoida lämpökarttojen avulla, jolloin nähdään, kuinka hyvin malli suoriutuu kussakin luokassa:
1. Lataa ja esikäsittele aineisto
Tuo CIFAR-10-aineisto Kerasista;
Normalisoi pikseliarvot välille
[0,1]
paremman konvergenssin saavuttamiseksi;Muunna luokkien tunnisteet
one-hot encoded
-muotoon kategorista luokittelua varten.
2. Määrittele CNN-malli
Toteuta VGG-tyyppinen 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 (Ylisuorittamisen estämiseksi satunnaisesti poistetaan neuroneita käytöstä):
Dropout-prosentti:
25%
.
Flatten-kerros – muuntaa 2D-piirrekuvat 1D-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
-häviöfunktio (moniluokkaluokitteluun);Accuracy metric
suorituskyvyn mittaamiseen (luokat ovat tasapainossa, ja voit lisätä muita mittareita tarpeen mukaan).
3. Kouluta malli
Määrittele
epochs
jabatch_size
-parametrit koulutukseen (esim.epochs=20, batch_size=64
);Määrittele
validation_split
-parametri, joka määrittää kuinka suuri osa koulutusaineistosta käytetään validointiin mallin suorituskyvyn seuraamiseksi tuntemattomilla kuvilla;Tallenna koulutushistoria, jotta voit visualisoida tarkkuuden ja häviön kehityksen.
4. Arvioi ja visualisoi tulokset
Testaa malli CIFAR-10 testiaineistolla ja tulosta tarkkuus;
Piirrä koulutushäviö vs. validointihäviö ylisuorittamisen tarkistamiseksi;
Piirrä koulutustarkkuus vs. validointitarkkuus oppimisen etenemisen varmistamiseksi.
Kiitos palautteestasi!