A TensorFlow adatkiegészítési módszereinek megvalósításával akadályozza meg a túlillesztést, és növelje gépi tanulási modellje pontosságát.

Az adatkiegészítés az a folyamat, amikor különféle transzformációkat alkalmaznak a betanítási adatokon. Segít növelni az adatkészlet sokféleségét és megakadályozni a túlillesztést. A túlillesztés többnyire akkor fordul elő, ha korlátozott adatok állnak rendelkezésre a modell betanításához.

Itt megtudhatja, hogyan használhatja a TensorFlow adatkiegészítő modulját az adatkészlet diverzifikálására. Ez megakadályozza a túlillesztést azáltal, hogy új adatpontokat generál, amelyek kissé eltérnek az eredeti adatoktól.

A mintaadatkészlet, amelyet használni fog

A macskák és kutyák adatkészletét fogja használni Kaggle. Ez az adatkészlet körülbelül 3000 macskáról és kutyáról készült képet tartalmaz. Ezek a képek képzési, tesztelési és érvényesítési készletekre vannak felosztva.

Az 1.0 címke egy kutyát, míg a 0.0 címke egy macskát jelöl.

Az adatbővítési technikákat megvalósító teljes forráskód és az, amelyik nem, elérhető a GitHub adattár.

instagram viewer

A TensorFlow telepítése és importálása

A követéshez rendelkeznie kell a a Python alapvető ismerete. A gépi tanulás alapismereteivel is rendelkeznie kell. Ha frissítőre van szüksége, érdemes lehet követnie néhányat oktatóanyagok a gépi tanulásról.

Nyisd ki Google Colab. Módosítsa a futásidejű típust GPU-ra. Ezután hajtsa végre a következő varázsparancsot az első kódcellán a TensorFlow környezetbe való telepítéséhez.

!pip install tensorflow

Importálja a TensorFlow-t és a kapcsolódó modulokat és osztályokat.

import tenzoráramlás mint tf
tól től tensorflow.keras.preprocessing.image import ImageDataGenerator
tól től tensorflow.keras.models import Egymás utáni
tól től tensorflow.keras.layers import Conv2D, MaxPooling2D, Lapítás, Sűrű, Kiesés

A tensorflow.keras.preprocessing.image lehetővé teszi az adatkiegészítés végrehajtását az adatkészletén.

Az ImageDataGenerator osztály példányainak létrehozása

Hozzon létre egy példányt a ImageDataGenerator osztály a vonatadatokhoz. Ezt az objektumot a betanítási adatok előfeldolgozására fogja használni. A modell betanítása során valós időben kibővített képadatokat fog generálni.

Abban a feladatban, hogy besorolja, hogy egy kép macska vagy kutya, használhatja a tükrözés, véletlenszerű szélesség, véletlenszerű magasság, véletlenszerű fényerő és nagyítási adatbővítési technikákat. Ezek a technikák új adatokat generálnak, amelyek az eredeti adatok valós forgatókönyveket reprezentáló változatait tartalmazzák.

# határozza meg a képadat-generátort a képzéshez
train_datagen = ImageDataGenerator (rescale=1./255,
horizontal_flip=Igaz,
width_shift_range=0.2,
height_shift_range=0.2,
brightness_range=[0.2,1.0],
zoom_range=0.2)

Hozzon létre egy másik példányt a ImageDataGenerator osztály a tesztadatokhoz. Szükséged lesz a átméretezni paraméter. Normalizálja a tesztképek pixelértékeit, hogy megfeleljenek az edzés során használt formátumnak.

# határozza meg a képadat-generátort teszteléshez
test_datagen = ImageDataGenerator (rescale=1./255)

Hozzon létre egy utolsó példányt a ImageDataGenerator osztályt az érvényesítési adatokhoz. Az érvényesítési adatokat ugyanúgy méretezzük át, mint a tesztadatokat.

# határozza meg a képadat-generátort az érvényesítéshez
validation_datagen = ImageDataGenerator (rescale=1./255)

Nem kell más kiegészítési technikákat alkalmaznia a teszt- és érvényesítési adatokhoz. Ennek az az oka, hogy a modell a teszt- és érvényesítési adatokat csak értékelési célokra használja. Az eredeti adateloszlást tükrözniük kell.

Adataid betöltése

Hozzon létre egy DirectoryIterator objektumot a képzési könyvtárból. Kibővített képek kötegeit fog generálni. Ezután adja meg a képzési adatokat tároló könyvtárat. Méretezze át a képeket egy rögzített méretre 64x64 pixel. Adja meg az egyes kötegek által használt képek számát. Végül adja meg a címke típusát bináris (azaz macska vagy kutya).

# a képzési könyvtár meghatározása
train_data = vonat_adatai.flow_from_directory (könyvtár=r'/content/drive/MyDrive/cats_and_dogs_filtered/train',
target_size=(64, 64),
batch_size=32,
class_mode='bináris')

Hozzon létre egy másikat DirectoryIterator objektumot a tesztelési könyvtárból. Állítsa be a paramétereket ugyanazokra az értékekre, mint a betanítási adatoknál.

# a tesztelési könyvtár meghatározása
teszt_adat = teszt_adat.folyam_a_könyvtárból (könyvtár="/content/drive/MyDrive/cats_and_dogs_filtered/test",
target_size=(64, 64),
batch_size=32,
class_mode='bináris')

Hozzon létre egy döntőt DirectoryIterator objektumot az érvényesítési könyvtárból. A paraméterek ugyanazok maradnak, mint a képzési és tesztelési adatoké.

# az érvényesítési könyvtár meghatározása
validation_data = érvényesítési_adat.folyam_a_könyvtárból (könyvtár='/content/drive/MyDrive/cats_and_dogs_filtered/validation',
target_size=(64, 64),
batch_size=32,
class_mode='bináris')

A címtáriterátorok nem bővítik az érvényesítési és tesztadatkészleteket.

A modell meghatározása

Határozza meg a neurális hálózat architektúráját. Használj Konvolúciós Neurális Hálózat (CNN). A CNN-eket úgy tervezték, hogy felismerjék a képek mintáit és jellemzőit.

modell = Soros()

# konvolúciós réteg 32 db 3x3 méretű szűrővel
model.add (Conv2D(32, (3, 3), aktiválás='relu', input_shape=(64, 64, 3)))

# max pooling réteg 2x2 medencemérettel
model.add (MaxPooling2D(pool_size=(2, 2)))

# konvolúciós réteg 64 db 3x3 méretű szűrővel
model.add (Conv2D(64, (3, 3), aktiválás='relu'))

# max pooling réteg 2x2 medencemérettel
model.add (MaxPooling2D(pool_size=(2, 2)))

# simítsa ki a konvolúciós és a pooling réteg kimenetét
model.add (Flatten())

# teljesen csatlakoztatott réteg 128 egységgel és ReLU aktiválással
model.add (Dense(128, aktiválás='relu'))

# véletlenszerűen ejtse ki az egységek 50%-át, hogy elkerülje a túlillesztést
model.add (Dropout(0.5))

# kimeneti réteg szigmoid aktiválással (bináris osztályozás)
model.add (Dense(1, aktiválás='sigmoid'))

Állítsa össze a modellt a bináris segítségével keresztentrópia veszteségfüggvény. A bináris osztályozási problémák gyakran használják azt. Az optimalizáláshoz használja a Ádám optimalizáló. Ez egy adaptív tanulási sebesség-optimalizáló algoritmus. Végül értékelje a modellt a pontosság szempontjából.

model.compile (veszteség='binary_crossentropy', optimalizáló='Ádám', metrics=['pontosság'])

Nyomtassa ki a modell architektúrájának összefoglalóját a konzolra.

model.summary()

A következő képernyőkép a modell architektúra megjelenítését mutatja be.

Ez áttekintést nyújt a modelltervezésről.

A modell betanítása

Tanítsd a modellt a elfér() módszer. Állítsa be a lépések számát korszakonként a betanítási minták számának osztva a csomó méret. Ezenkívül állítsa be az érvényesítési adatokat és az érvényesítési lépések számát.

# Tanítsa meg a modellt a képzési adatokon
történelem = model.fit (train_data,
steps_per_epoch=train_data.n // train_data.batch_size,
korszakok=50,
validation_data=validation_data,
validation_steps=validation_data.n // validation_data.batch_size)

A ImageDataGenerator osztály valós időben adatkiegészítést alkalmaz a képzési adatokhoz. Ez lelassítja a modell betanítási folyamatát.

A modell értékelése

Értékelje modellje teljesítményét a tesztadatok alapján a segítségével értékel() módszer. Ezenkívül nyomtassa ki a tesztveszteséget és a pontosságot a konzolra.

test_loss, test_acc = model.evaluate (test_data,
Steps=test_data.n // test_data.batch_size)
nyomtatás(f'Teszt vesztesége: {test_loss}')
nyomtatás(f'Teszt pontossága: {test_acc}')

A következő képernyőkép a modell teljesítményét mutatja.

A modell meglehetősen jól teljesít soha nem látott adatokon.

Ha olyan kódot futtat, amely nem valósítja meg az adatkiegészítési technikákat, a modell betanítási pontossága 1. Ami azt jelenti, hogy túl jól illeszkedik. Gyengén teljesít olyan adatokon is, amelyeket korábban soha nem látott. Ennek az az oka, hogy megtanulja az adatkészlet sajátosságait.

Mikor nem hasznos az adatbővítés?

  • Amikor az adatkészlet már sokrétű és nagy: Az adatkiegészítés növeli az adatkészlet méretét és sokféleségét. Ha az adatkészlet már nagy és változatos, az adatbővítés nem lesz hasznos.
  • Ha az adatkészlet túl kicsi: Az adatkiegészítés nem hozhat létre olyan új funkciókat, amelyek nem szerepelnek az eredeti adatkészletben. Ezért nem tudja kompenzálni azt a kis adatkészletet, amelyből hiányzik a legtöbb olyan funkció, amelyet a modellnek meg kell tanulnia.
  • Ha az adatbővítés típusa nem megfelelő: Például előfordulhat, hogy a képek elforgatása nem hasznos, ha az objektumok tájolása fontos.

Mire képes a TensorFlow?

A TensorFlow egy változatos és hatékony könyvtár. Képes összetett mély tanulási modellek betanítására, és számos eszközön futhat az okostelefonoktól a szerverek klasztereiig. Ez segítette a gépi tanulást használó számítógépes eszközök teljesítményét.