Preveniți supraadaptarea și sporiți acuratețea modelului de învățare automată prin implementarea metodelor de creștere a datelor TensorFlow.

Augmentarea datelor este procesul de aplicare a diferitelor transformări datelor de antrenament. Ajută la creșterea diversității setului de date și la prevenirea supraadaptării. Supraadaptarea are loc mai ales atunci când aveți date limitate pentru a vă antrena modelul.

Aici veți învăța cum să utilizați modulul de creștere a datelor TensorFlow pentru a vă diversifica setul de date. Acest lucru va preveni supraadaptarea prin generarea de noi puncte de date care sunt ușor diferite de datele originale.

Setul de date eșantion pe care îl veți folosi

Veți folosi setul de date despre pisici și câini de la Kaggle. Acest set de date conține aproximativ 3.000 de imagini cu pisici și câini. Aceste imagini sunt împărțite în seturi de instruire, testare și validare.

Eticheta 1.0 reprezintă un câine, în timp ce eticheta 0.0 reprezintă o pisică.

Codul sursă complet care implementează tehnici de creștere a datelor și cel care nu este disponibil în a

instagram viewer
Depozitul GitHub.

Instalarea și importul TensorFlow

Pentru a urma, ar trebui să aveți un înțelegerea de bază a Python. De asemenea, ar trebui să aveți cunoștințe de bază despre învățarea automată. Dacă aveți nevoie de o actualizare, poate doriți să luați în considerare următoarele tutoriale despre învățarea automată.

Deschis Google Colab. Schimbați tipul de rulare la GPU. Apoi, executați următoarea comandă magică pe prima celulă de cod pentru a instala TensorFlow în mediul dumneavoastră.

!pip instalează tensorflow

Importați TensorFlow și modulele și clasele sale relevante.

import tensorflow la fel de tf
din tensorflow.keras.preprocesare.imagine import ImageDataGenerator
din tensorflow.keras.modele import Secvenţial
din tensorflow.keras.straturi import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

The tensorflow.keras.preprocesare.imagine vă va permite să efectuați creșterea datelor pe setul dvs. de date.

Crearea de instanțe ale clasei ImageDataGenerator

Creați o instanță a ImageDataGenerator clasa pentru datele trenului. Veți folosi acest obiect pentru preprocesarea datelor de antrenament. Va genera loturi de date de imagine augmentate în timp real în timpul antrenamentului de model.

În sarcina de a clasifica dacă o imagine este o pisică sau un câine, puteți utiliza tehnicile de răsturnare, lățime aleatorie, înălțime aleatorie, luminozitate aleatoare și tehnici de mărire a datelor de mărire. Aceste tehnici vor genera date noi care conțin variații ale datelor originale reprezentând scenarii din lumea reală.

# definiți generatorul de date de imagine pentru antrenament
train_datagen = ImageDataGenerator (redimensionare=1./255,
orizontal_flip=Adevărat,
width_shift_range=0.2,
înălțime_schift_range=0.2,
brightness_range=[0.2,1.0],
zoom_range=0.2)

Creați o altă instanță a ImageDataGenerator clasa pentru datele de testare. Veți avea nevoie de redimensionare parametru. Acesta va normaliza valorile pixelilor imaginilor de testare pentru a se potrivi cu formatul utilizat în timpul antrenamentului.

# definiți generatorul de date de imagine pentru testare
test_datagen = ImageDataGenerator (redimensionare=1./255)

Creați o instanță finală a ImageDataGenerator clasa pentru datele de validare. Redimensionați datele de validare în același mod ca și datele de testare.

# definiți generatorul de date de imagine pentru validare
validation_datagen = ImageDataGenerator (redimensionare=1./255)

Nu trebuie să aplicați celelalte tehnici de augmentare la datele de testare și validare. Acest lucru se datorează faptului că modelul utilizează datele de testare și validare numai în scopuri de evaluare. Acestea ar trebui să reflecte distribuția inițială a datelor.

Încărcarea datelor dvs

Creeaza o DirectoryIterator obiect din directorul de instruire. Va genera loturi de imagini augmentate. Apoi specificați directorul care stochează datele de antrenament. Redimensionați imaginile la o dimensiune fixă ​​de 64x64 pixeli. Specificați numărul de imagini pe care le va folosi fiecare lot. În cele din urmă, specificați tipul de etichetă care trebuie să fie binar (adică pisică sau câine).

# definirea directorului de instruire
train_data = train_datagen.flow_from_directory (director=r'/content/drive/MyDrive/cats_and_dogs_filtered/train',
target_size=(64, 64),
batch_size=32,
class_mode='binar')

Creați altul DirectoryIterator obiect din directorul de testare. Setați parametrii la aceleași valori ca cele ale datelor de antrenament.

# definirea directorului de testare
test_data = test_datagen.flow_from_directory (director=„/content/drive/MyDrive/cats_and_dogs_filtered/test”,
target_size=(64, 64),
batch_size=32,
class_mode='binar')

Creați o finală DirectoryIterator obiect din directorul de validare. Parametrii rămân aceiași cu cei ai datelor de antrenament și testare.

# definirea directorului de validare
validation_data = validation_datagen.flow_from_directory (director=„/content/drive/MyDrive/cats_and_dogs_filtered/validation”,
target_size=(64, 64),
batch_size=32,
class_mode='binar')

Iteratoarele de director nu măresc seturile de date de validare și de testare.

Definirea modelului dvs

Definiți arhitectura rețelei dvs. neuronale. Folosește o Rețeaua neuronală convoluțională (CNN). CNN-urile sunt concepute pentru a recunoaște modele și caracteristici în imagini.

model = Sequential()

# strat convoluțional cu 32 de filtre de dimensiune 3x3
model.add (Conv2D(32, (3, 3), activare='relu', input_shape=(64, 64, 3)))

# strat maxim de acumulare cu dimensiunea piscinei 2x2
model.add (MaxPooling2D(pool_size=(2, 2)))

# strat convoluțional cu 64 de filtre de dimensiune 3x3
model.add (Conv2D(64, (3, 3), activare='relu'))

# strat maxim de acumulare cu dimensiunea piscinei 2x2
model.add (MaxPooling2D(pool_size=(2, 2)))

# aplatiza ieșirea din straturile convoluționale și de grupare
model.add (Aplatizare())

# strat complet conectat cu 128 de unități și activare ReLU
model.add (Dens(128, activare='relu'))

# renunțați la întâmplare a 50% dintre unități pentru a preveni suprainstalarea
model.add (Renunțare(0.5))

# strat de ieșire cu activare sigmoid (clasificare binară)
model.add (Dens(1, activare="sigmoid"))

Compilați modelul folosind binarul entropie încrucișată funcția de pierdere. Problemele de clasificare binară îl folosesc în mod obișnuit. Pentru optimizator, utilizați Adam optimizator. Este un algoritm adaptiv de optimizare a ratei de învățare. În cele din urmă, evaluați modelul în ceea ce privește acuratețea.

model.compilare (pierdere=„binary_crossentropie”, optimizator='adam', metrics=['precizie'])

Imprimați un rezumat al arhitecturii modelului pe consolă.

model.summary()

Următoarea captură de ecran arată vizualizarea arhitecturii modelului.

Aceasta vă oferă o imagine de ansamblu asupra modului în care arată designul modelului dvs.

Antrenează-ți modelul

Antrenează modelul folosind potrivi() metodă. Setați numărul de pași pe epocă să fie numărul de mostre de antrenament împărțit la batch_size. De asemenea, setați datele de validare și numărul de pași de validare.

# Antrenează modelul pe datele de antrenament
istoric = model.fit (datele_tren,
steps_per_epoch=train_data.n // train_data.batch_size,
epoci=50,
validation_data=validation_data,
validation_steps=validation_data.n // validation_data.batch_size)

The ImageDataGenerator clasa aplică mărirea datelor datelor de antrenament în timp real. Acest lucru face ca procesul de antrenament al modelului să fie mai lent.

Evaluarea modelului dvs

Evaluați performanța modelului dvs. pe baza datelor de testare folosind a evalua() metodă. De asemenea, imprimați pierderea și acuratețea testului pe consolă.

test_loss, test_acc = model.evaluate (test_date,
steps=test_data.n // test_data.batch_size)
imprimare(f'Pierderea testului: {test_loss}')
imprimare(f'Acuratețea testului: {test_acc}')

Următoarea captură de ecran arată performanța modelului.

Modelul funcționează destul de bine pe date nevăzute.

Când rulați cod care nu implementează tehnicile de creștere a datelor, precizia antrenamentului modelului este 1. Ceea ce înseamnă că se supraajustează. De asemenea, are performanțe slabe pe date pe care nu le-a văzut niciodată până acum. Acest lucru se datorează faptului că învață particularitățile setului de date.

Când nu este utilă creșterea datelor?

  • Când setul de date este deja divers și mare: Mărirea datelor mărește dimensiunea și diversitatea unui set de date. Dacă setul de date este deja mare și divers, creșterea datelor nu va fi utilă.
  • Când setul de date este prea mic: Mărirea datelor nu poate crea caracteristici noi care nu sunt prezente în setul de date original. Prin urmare, nu poate compensa un set de date mic, căruia îi lipsesc majoritatea caracteristicilor pe care modelul le necesită pentru a le învăța.
  • Când tipul de mărire a datelor este inadecvat: De exemplu, rotirea imaginilor poate să nu fie utilă acolo unde orientarea obiectelor este importantă.

De ce este capabil TensorFlow

TensorFlow este o bibliotecă diversă și puternică. Este capabil să antreneze modele complexe de deep learning și poate rula pe o gamă largă de dispozitive, de la smartphone-uri până la grupuri de servere. A ajutat dispozitivele de calcul de vârf care utilizează învățarea automată.