Estä ylisovitus ja tehosta koneoppimismallisi tarkkuutta ottamalla käyttöön TensorFlow'n datan lisäysmenetelmiä.
Datan lisäys on prosessi, jossa harjoitustietoihin sovelletaan erilaisia muunnoksia. Se auttaa lisäämään tietojoukon monimuotoisuutta ja estämään ylisovitusta. Ylisovitus tapahtuu enimmäkseen, kun sinulla on rajoitetusti tietoja mallin kouluttamiseen.
Täällä opit käyttämään TensorFlow'n tietojen lisäysmoduulia tietojoukkosi monipuolistamiseen. Tämä estää ylisovituksen luomalla uusia datapisteitä, jotka poikkeavat hieman alkuperäisistä tiedoista.
Käyttämäsi näytetietojoukko
Käytät kissat ja koirat -tietoaineistoa Kaggle. Tämä tietojoukko sisältää noin 3 000 kuvaa kissoista ja koirista. Nämä kuvat on jaettu koulutus-, testaus- ja validointisarjoihin.
Etiketti 1.0 edustaa koiraa, kun taas etiketti 0.0 edustaa kissaa.
Täysi lähdekoodi, joka toteuttaa tiedon lisäystekniikoita, ja se, joka ei toteuta, on saatavilla a GitHub-arkisto.
TensorFlow'n asentaminen ja tuonti
Jotta voit jatkaa, sinulla pitäisi olla a
Pythonin perustiedot. Sinulla tulee olla myös perustiedot koneoppimisesta. Jos tarvitset päivitystä, sinun kannattaa harkita joidenkin seuraamista koneoppimisen tutoriaalit.Avata Google Colab. Muuta ajonaikatyypiksi GPU. Asenna TensorFlow ympäristöösi suorittamalla seuraava taikakomento ensimmäisessä koodisolussa.
!pip install tensorflow
Tuo TensorFlow ja sen asiaankuuluvat moduulit ja luokat.
tuonti tensorflow kuten tf
alkaen tensorflow.keras.preprocessing.image tuonti ImageDataGenerator
alkaen tensorflow.keras.models tuonti Peräkkäinen
alkaen tensorflow.keras.layers tuonti Conv2D, MaxPooling2D, litistys, tiheä, pudotus
The tensorflow.keras.preprocessing.image avulla voit suorittaa datan lisäyksen tietojoukollesi.
ImageDataGenerator-luokan ilmentymien luominen
Luo esiintymä ImageDataGenerator luokka junatiedoille. Käytät tätä objektia harjoitustietojen esikäsittelyyn. Se luo eriä lisättyä kuvadataa reaaliajassa mallikoulutuksen aikana.
Luokittelutehtävässä, onko kuva kissa vai koira, voit käyttää kääntö-, satunnaisen leveyden, satunnaisen korkeuden, satunnaisen kirkkauden ja zoomaustietojen lisäystekniikoita. Nämä tekniikat luovat uutta dataa, joka sisältää muunnelmia alkuperäisestä tiedosta, jotka edustavat todellisia skenaarioita.
# määritä kuvatietojen generaattori harjoittelua varten
train_datagen = ImageDataGenerator (rescale=1./255,
horizontal_flip=Totta,
width_shift_range=0.2,
height_shift_range=0.2,
brightness_range=[0.2,1.0],
zoom_range=0.2)
Luo toinen esiintymä ImageDataGenerator luokkaa testidatalle. Tarvitset skaalata uudelleen parametri. Se normalisoi testikuvien pikseliarvot vastaamaan harjoituksen aikana käytettyä muotoa.
# määritä kuvatietojen generaattori testausta varten
test_datagen = ImageDataGenerator (rescale=1./255)
Luo viimeinen esiintymä ImageDataGenerator luokkaa validointitiedoille. Skaalaa validointitiedot uudelleen samalla tavalla kuin testitiedot.
# määritä kuvatietojen generaattori validointia varten
validation_datagen = ImageDataGenerator (rescale=1./255)
Sinun ei tarvitse soveltaa muita lisäystekniikoita testi- ja validointitietoihin. Tämä johtuu siitä, että malli käyttää testi- ja validointitietoja vain arviointitarkoituksiin. Niiden tulee heijastaa alkuperäistä tietojen jakelua.
Ladataan tietojasi
Luo DirectoryIterator objekti koulutushakemistosta. Se luo eriä lisättyjä kuvia. Määritä sitten hakemisto, johon harjoitustiedot on tallennettu. Muuta kuvien kokoa kiinteään kokoon 64x64 pikseliä. Määritä kunkin erän käyttämien kuvien määrä. Määritä lopuksi tarran tyyppi binääri (eli kissa tai koira).
# koulutushakemiston määrittäminen
junan_tiedot = junan_tiedot.virtaus_hakemistosta (hakemisto=r'/content/drive/MyDrive/cats_and_dogs_filtered/train',
target_size=(64, 64),
erän_koko=32,
class_mode='binääri')
Luo toinen DirectoryIterator objekti testaushakemistosta. Aseta parametrit samoihin arvoihin kuin harjoitustietojen arvot.
# testaushakemiston määrittäminen
testi_tiedot = testi_tiedot.virtaus_hakemistosta (hakemisto='/content/drive/MyDrive/cats_and_dogs_filtered/test',
target_size=(64, 64),
erän_koko=32,
class_mode='binääri')
Luo finaali DirectoryIterator objekti vahvistushakemistosta. Parametrit pysyvät samoina kuin koulutus- ja testaustietojen parametrit.
# määrittää vahvistushakemiston
validointitiedot = validointitiedot.virtaus_hakemistosta (hakemisto='/content/drive/MyDrive/cats_and_dogs_filtered/validation',
target_size=(64, 64),
erän_koko=32,
class_mode='binääri')
Hakemistoiteraattorit eivät lisää validointi- ja testaustietojoukkoja.
Mallin määrittäminen
Määritä hermoverkkosi arkkitehtuuri. Käytä Konvoluutiohermoverkko (CNN). CNN: t on suunniteltu tunnistamaan kuvien kuvioita ja piirteitä.
malli = peräkkäinen()
# konvoluutiokerros, jossa on 32 suodatinta, joiden koko on 3x3
model.add (Conv2D(32, (3, 3), aktivointi='relu', input_shape=(64, 64, 3)))# max pooling kerros altaan koko 2x2
model.add (MaxPooling2D(pool_size=(2, 2)))# konvoluutiokerros, jossa on 64 suodatinta, joiden koko on 3x3
model.add (Conv2D(64, (3, 3), aktivointi='relu'))# max pooling kerros altaan koko 2x2
model.add (MaxPooling2D(pool_size=(2, 2)))# tasoittaa tulos konvoluutio- ja poolauskerroksista
model.add (litteä())# täysin yhdistetty kerros 128 yksiköllä ja ReLU-aktivointi
model.add (Tiheä(128, aktivointi ='relu'))# pudota satunnaisesti pois 50 % yksiköistä yliasentamisen estämiseksi
model.add (Dropout(0.5))
# lähtökerros sigmoidiaktivaatiolla (binääriluokitus)
model.add (Tiheä(1, aktivointi ="sigmoidi"))
Kokoa malli käyttämällä binääriä ristientropia häviötoiminto. Binääriluokitusongelmat käyttävät sitä yleisesti. Käytä optimointia varten Adamin optimoija. Se on mukautuva oppimisnopeuden optimointialgoritmi. Lopuksi arvioi mallin tarkkuus.
model.compile (tappio='binary_crossentropy', optimoija='adam', metrics=['tarkkuus'])
Tulosta yhteenveto mallin arkkitehtuurista konsoliin.
malli.summary()
Seuraava kuvakaappaus näyttää malliarkkitehtuurin visualisoinnin.
Tämä antaa sinulle yleiskuvan siitä, miltä mallisi suunnittelu näyttää.
Mallin kouluttaminen
Harjoittele mallia käyttämällä sopii () menetelmä. Aseta vaiheiden määrä epookkia kohti koulutusnäytteiden lukumääräksi jaettuna erän_koko. Aseta myös vahvistustiedot ja vahvistusvaiheiden lukumäärä.
# Harjoittele malli harjoitustietojen perusteella
historia = malli.fit (train_data,
steps_per_epoch=train_data.n // train_data.batch_size,
aikakaudet =50,
validation_data=validation_data,
validation_steps=validation_data.n // validation_data.batch_size)
The ImageDataGenerator luokka soveltaa tietojen lisäystä harjoitustietoihin reaaliajassa. Tämä hidastaa mallin koulutusprosessia.
Arvioi malliasi
Arvioi mallisi suorituskyky testitietojen perusteella käyttämällä arvioida() menetelmä. Tulosta myös testihäviö ja tarkkuus konsoliin.
test_loss, test_acc = malli.evaluate (testitiedot,
Steps=test_data.n // test_data.batch_size)
Tulosta(f'Test häviö: {test_loss}')
Tulosta(f'Testin tarkkuus: {test_acc}')
Seuraava kuvakaappaus näyttää mallin suorituskyvyn.
Malli toimii kohtuullisen hyvin ennennäkemättömällä tiedolla.
Kun suoritat koodia, joka ei toteuta tietojen lisäystekniikoita, mallin harjoitustarkkuus on 1. Mikä tarkoittaa, että se sopii yli. Se toimii myös huonosti datalla, jota se ei ole koskaan nähnyt. Tämä johtuu siitä, että se oppii tietojoukon erityispiirteet.
Milloin tietojen lisäyksestä ei ole apua?
- Kun tietojoukko on jo monipuolinen ja suuri: Tietojen lisäys lisää tietojoukon kokoa ja monimuotoisuutta. Jos tietojoukko on jo suuri ja monipuolinen, tietojen lisäyksestä ei ole hyötyä.
- Kun tietojoukko on liian pieni: Tietojen lisäys ei voi luoda uusia ominaisuuksia, joita ei ole alkuperäisessä tietojoukossa. Siksi se ei voi kompensoida pientä tietojoukkoa, josta puuttuu useimmat ominaisuudet, jotka malli vaatii oppiakseen.
- Kun tietojen lisäyksen tyyppi ei ole sopiva: Esimerkiksi kuvien pyörittämisestä ei ehkä ole apua silloin, kun objektien suunta on tärkeä.
Mihin TensorFlow pystyy
TensorFlow on monipuolinen ja tehokas kirjasto. Se pystyy opettamaan monimutkaisia syväoppimismalleja ja sitä voidaan käyttää useilla laitteilla älypuhelimista palvelinklustereihin. Se on auttanut koneoppimista hyödyntäviä laskentalaitteita.