Zabráňte preťaženiu a zvýšte presnosť svojho modelu strojového učenia implementáciou metód zvyšovania údajov TensorFlow.

Rozšírenie dát je proces aplikácie rôznych transformácií na trénovacie dáta. Pomáha zvyšovať rozmanitosť súboru údajov a predchádzať nadmernému prispôsobeniu. K preťaženiu väčšinou dochádza, keď máte obmedzené údaje na trénovanie svojho modelu.

Tu sa dozviete, ako používať modul na rozšírenie údajov TensorFlow na diverzifikáciu vášho súboru údajov. Predídete tak preplneniu generovaním nových údajových bodov, ktoré sa mierne líšia od pôvodných údajov.

Vzorový súbor údajov, ktorý budete používať

Budete používať súbor údajov o mačkách a psoch Kaggle. Tento súbor údajov obsahuje približne 3 000 obrázkov mačiek a psov. Tieto obrázky sú rozdelené do tréningových, testovacích a overovacích sád.

Označenie 1.0 predstavuje psa, zatiaľ čo označenie 0.0 predstavuje mačku.

Úplný zdrojový kód implementujúci techniky rozširovania údajov a ten, ktorý nie je dostupný v a úložisko GitHub.

Inštalácia a import TensorFlow

instagram viewer

Ak chcete pokračovať, mali by ste mať a základné pochopenie Pythonu. Mali by ste mať aj základné znalosti strojového učenia. Ak potrebujete obnovenie, možno budete chcieť zvážiť niektoré z nich návody na strojové učenie.

OTVORENÉ Google Colab. Zmeňte typ runtime na GPU. Potom vykonajte nasledujúci magický príkaz v prvej bunke kódu a nainštalujte TensorFlow do svojho prostredia.

!pip install tensorflow

Importujte TensorFlow a jeho príslušné moduly a triedy.

importovať tensorflow ako tf
od tensorflow.keras.preprocessing.image importovať ImageDataGenerator
od tensorflow.keras.modely importovať Sekvenčné
od tensorflow.keras.vrstvy importovať Conv2D, MaxPooling2D, Flatten, Dense, Dropout

The tensorflow.keras.preprocessing.image vám umožní vykonávať rozšírenie údajov vo vašom súbore údajov.

Vytváranie inštancií triedy ImageDataGenerator

Vytvorte inštanciu súboru ImageDataGenerator triedy pre údaje o vlaku. Tento objekt použijete na predspracovanie tréningových dát. Počas tréningu modelu bude generovať dávky rozšírených obrazových údajov v reálnom čase.

V úlohe klasifikácie, či je obrázok mačka alebo pes, môžete použiť techniky zväčšenia údajov preklápania, náhodnej šírky, náhodnej výšky, náhodného jasu a priblíženia. Tieto techniky vygenerujú nové údaje, ktoré obsahujú variácie pôvodných údajov reprezentujúcich scenáre reálneho sveta.

# definujte generátor obrazových údajov pre tréning
train_datagen = ImageDataGenerator (zmena mierky=1./255,
horizontal_flip=Pravda,
rozsah_šírky=0.2,
rozsah_posunu_vysky=0.2,
rozsah_jasu=[0.2,1.0],
rozsah_priblíženia=0.2)

Vytvorte ďalšiu inštanciu súboru ImageDataGenerator triedy pre testovacie údaje. Budete potrebovať preškálovať parameter. Znormalizuje hodnoty pixelov testovacích obrázkov tak, aby zodpovedali formátu použitému počas tréningu.

# definujte generátor obrazových údajov na testovanie
test_datagen = ImageDataGenerator (zmena mierky=1./255)

Vytvorte poslednú inštanciu súboru ImageDataGenerator triedy pre overovacie údaje. Zmeňte mierku validačných údajov rovnakým spôsobom ako testovacie údaje.

# definujte generátor obrazových údajov na overenie
validation_datagen = ImageDataGenerator (zmeniť mierku =1./255)

Na testovacie a validačné údaje nemusíte použiť iné techniky rozšírenia. Je to preto, že model používa údaje z testovania a overovania len na účely hodnotenia. Mali by odrážať pôvodné rozloženie údajov.

Načítavanie údajov

Vytvor DirectoryIterator objekt z adresára školení. Vygeneruje dávky rozšírených obrázkov. Potom zadajte adresár, v ktorom sú uložené tréningové údaje. Zmeňte veľkosť obrázkov na pevnú veľkosť 64x64 pixelov. Zadajte počet obrázkov, ktoré použije každá dávka. Nakoniec zadajte typ štítku binárne (t.j. mačka alebo pes).

# definovanie školiaceho adresára
train_data = train_datagen.flow_from_directory (adresár=r'/content/drive/MyDrive/cats_and_dogs_filtered/train',
target_size=(64, 64),
veľkosť_dávky=32,
class_mode='binary')

Vytvorte ďalší DirectoryIterator objekt z testovacieho adresára. Nastavte parametre na rovnaké hodnoty, aké majú tréningové dáta.

# definovanie testovacieho adresára
test_data = test_datagen.flow_from_directory (adresár='/content/drive/MyDrive/cats_and_dogs_filtered/test',
target_size=(64, 64),
veľkosť_dávky=32,
class_mode='binary')

Vytvorte finále DirectoryIterator objekt z overovacieho adresára. Parametre zostávajú rovnaké ako parametre tréningových a testovacích údajov.

# definovanie validačného adresára
validation_data = validation_datagen.flow_from_directory (adresár='/content/drive/MyDrive/cats_and_dogs_filtered/validation',
target_size=(64, 64),
veľkosť_dávky=32,
class_mode='binary')

Iterátory adresárov nerozširujú validačné a testovacie množiny údajov.

Definovanie vášho modelu

Definujte architektúru vašej neurónovej siete. Použite a Konvolučná neurónová sieť (CNN). CNN sú navrhnuté tak, aby rozpoznávali vzory a prvky v obrázkoch.

model = Sekvenčný()

# konvolučná vrstva s 32 filtrami veľkosti 3x3
model.add (Conv2D(32, (3, 3), aktivácia='relu', input_shape=(64, 64, 3)))

# max bazénová vrstva s rozmerom bazéna 2x2
model.add (MaxPooling2D(veľkosť_poolu=(2, 2)))

# konvolučná vrstva so 64 filtrami veľkosti 3x3
model.add (Conv2D(64, (3, 3), aktivácia='relu'))

# max bazénová vrstva s rozmerom bazéna 2x2
model.add (MaxPooling2D(veľkosť_poolu=(2, 2)))

# vyrovnajte výstup z konvolučnej a združovacej vrstvy
model.add (Flatten())

# plne prepojená vrstva so 128 jednotkami a aktiváciou ReLU
model.add (Hustý(128, aktivácia='relu'))

# náhodne vypustite 50 % jednotiek, aby ste predišli nadmernému vybaveniu
model.add (Dropout(0.5))

# výstupná vrstva s aktiváciou sigmatu (binárna klasifikácia)
model.add (Hustý(1, aktivácia='esovitá'))

Zostavte model pomocou binárneho kódu krížová entropia stratová funkcia. Binárne klasifikačné problémy ho bežne používajú. Pre optimalizátor použite Adam optimalizátor. Ide o adaptívny algoritmus optimalizácie rýchlosti učenia. Nakoniec zhodnoťte model z hľadiska presnosti.

model.compile (strata='binary_crossentropy', optimalizátor='adam', metriky=["presnosť"])

Vytlačte súhrn architektúry modelu na konzole.

model.summary()

Nasledujúca snímka obrazovky zobrazuje vizualizáciu architektúry modelu.

Získate tak prehľad o tom, ako vyzerá návrh vášho modelu.

Trénujte svoj model

Trénujte model pomocou fit() metóda. Nastavte počet krokov na epochu tak, aby bol počet trénovacích vzoriek vydelený hodnotou veľkosť_dávky. Nastavte tiež údaje overenia a počet krokov overenia.

# Trénujte model na tréningových údajoch
história = model.fit (údaje o vlaku,
steps_per_epoch=train_data.n // train_data.batch_size,
epochy =50,
validation_data=validation_data,
validation_steps=validation_data.n // validation_data.batch_size)

The ImageDataGenerator trieda aplikuje rozšírenie dát na tréningové dáta v reálnom čase. Tým je trénovací proces modelu pomalší.

Hodnotenie vášho modelu

Vyhodnoťte výkon svojho modelu na testovacích údajoch pomocou ohodnotiť() metóda. Vytlačte tiež stratu a presnosť testu na konzolu.

test_loss, test_acc = model.evaluate (test_data,
steps=test_data.n // test_data.batch_size)
vytlačiť (f'Test strata: {test_loss}')
vytlačiť (f'Presnosť testu: {test_acc}')

Nasledujúca snímka obrazovky zobrazuje výkon modelu.

Model funguje pomerne dobre na nikdy nevidených údajoch.

Keď spustíte kód, ktorý neimplementuje techniky rozšírenia údajov, presnosť trénovania modelu je 1. Čo znamená, že prepadáva. Má tiež nízku výkonnosť s údajmi, ktoré nikdy predtým nevidel. Je to preto, že sa učí zvláštnosti súboru údajov.

Kedy nie je rozšírenie údajov užitočné?

  • Keď je už množina údajov rôznorodá a veľká: Rozšírenie údajov zvyšuje veľkosť a rozmanitosť súboru údajov. Ak je súbor údajov už veľký a rôznorodý, rozšírenie údajov nebude užitočné.
  • Keď je súbor údajov príliš malý: Rozšírenie údajov nemôže vytvoriť nové funkcie, ktoré sa nenachádzajú v pôvodnej množine údajov. Preto nemôže kompenzovať malý súbor údajov, ktorému chýba väčšina funkcií, ktoré sa model vyžaduje na naučenie.
  • Keď je typ rozšírenia údajov nevhodný: Napríklad otáčanie obrázkov nemusí byť užitočné tam, kde je dôležitá orientácia objektov.

Čo dokáže TensorFlow

TensorFlow je rôznorodá a výkonná knižnica. Je schopný trénovať komplexné modely hlbokého učenia a môže bežať na rôznych zariadeniach od smartfónov až po klastre serverov. Pomohol napájať okrajové výpočtové zariadenia, ktoré využívajú strojové učenie.