Apsaugokite nuo per didelio pritaikymo ir padidinkite mašininio mokymosi modelio tikslumą įdiegę TensorFlow duomenų papildymo metodus.

Duomenų papildymas – tai įvairių transformacijų pritaikymo mokymo duomenims procesas. Tai padeda padidinti duomenų rinkinio įvairovę ir išvengti per didelio pritaikymo. Per didelis pritaikymas dažniausiai įvyksta, kai turite ribotus duomenis modeliui išmokyti.

Čia sužinosite, kaip naudoti „TensorFlow“ duomenų papildymo modulį duomenų rinkiniui įvairinti. Taip bus išvengta perpildymo generuojant naujus duomenų taškus, kurie šiek tiek skiriasi nuo pradinių duomenų.

Pavyzdinis duomenų rinkinys, kurį naudosite

Naudosite kačių ir šunų duomenų rinkinį iš Kaggle. Šiame duomenų rinkinyje yra maždaug 3000 kačių ir šunų vaizdų. Šie vaizdai suskirstyti į mokymo, testavimo ir patvirtinimo rinkinius.

Etiketė 1.0 žymi šunį, o etiketė 0.0 – katę.

Visas šaltinio kodas, įgyvendinantis duomenų papildymo metodus, ir tas, kuris ne, yra prieinamas a GitHub saugykla.

„TensorFlow“ diegimas ir importavimas

instagram viewer

Norėdami tęsti, turėtumėte turėti a Pagrindinis Python supratimas. Taip pat turėtumėte turėti pagrindinių žinių apie mašininį mokymąsi. Jei jums reikia atnaujinimo, galbūt norėsite sekti kai kuriuos mašininio mokymosi vadovėliai.

Atviras „Google Colab“.. Pakeiskite vykdymo laiką į GPU. Tada vykdykite šią stebuklingą komandą pirmajame kodo langelyje, kad įdiegtumėte TensorFlow į savo aplinką.

!pip install tensorflow

Importuokite TensorFlow ir atitinkamus modulius bei klases.

importuoti tensorflow kaip tf
tensorflow.keras.preprocessing.image importuoti ImageDataGenerator
tensorflow.keras.models importuoti Eilės tvarka
tensorflow.keras.layers importuoti Conv2D, MaxPooling2D, išlyginamas, tankus, iškrenta

The tensorflow.keras.preprocessing.image leis jums atlikti duomenų papildymą savo duomenų rinkinyje.

„ImageDataGenerator“ klasės egzempliorių kūrimas

Sukurkite egzempliorių ImageDataGenerator traukinio duomenų klasė. Šį objektą naudosite išankstiniam treniruočių duomenų apdorojimui. Modelio mokymo metu realiuoju laiku jis generuos papildytų vaizdo duomenų paketus.

Klasifikuodami, ar vaizdas yra katė ar šuo, galite naudoti apvertimo, atsitiktinio pločio, atsitiktinio aukščio, atsitiktinio ryškumo ir mastelio didinimo metodus. Taikant šiuos metodus bus generuojami nauji duomenys, kuriuose yra originalių duomenų variantų, atspindinčių realaus pasaulio scenarijus.

# apibrėžkite vaizdo duomenų generatorių mokymui
train_datagen = ImageDataGenerator (rescale=1./255,
horizontal_flip=Tiesa,
width_shift_range=0.2,
height_shift_range=0.2,
brightness_range=[0.2,1.0],
zoom_range=0.2)

Sukurkite kitą egzempliorių ImageDataGenerator klasėje testo duomenims. Jums reikės persvarstyti parametras. Jis normalizuos bandomųjų vaizdų pikselių reikšmes, kad atitiktų treniruočių metu naudojamą formatą.

# apibrėžkite vaizdo duomenų generatorių testavimui
test_datagen = ImageDataGenerator (rescale=1./255)

Sukurkite paskutinį egzempliorių ImageDataGenerator patvirtinimo duomenų klasė. Pakeiskite patvirtinimo duomenų skalę taip pat, kaip ir bandymo duomenis.

# apibrėžkite vaizdo duomenų generatorių patvirtinimui
validation_datagen = ImageDataGenerator (rescale=1./255)

Jums nereikia taikyti kitų papildymo metodų bandymo ir patvirtinimo duomenims. Taip yra todėl, kad modelis naudoja bandymo ir patvirtinimo duomenis tik vertinimo tikslais. Jie turėtų atspindėti pradinį duomenų paskirstymą.

Įkeliami jūsų duomenys

Sukurti DirectoryIterator objektą iš mokymo katalogo. Jis sugeneruos papildytų vaizdų partijas. Tada nurodykite katalogą, kuriame saugomi treniruočių duomenys. Pakeiskite vaizdų dydį iki fiksuoto dydžio 64x64 pikselių. Nurodykite vaizdų, kuriuos naudos kiekviena partija, skaičių. Galiausiai nurodykite etiketės tipą dvejetainis (t. y. katė ar šuo).

# apibrėžiant mokymo katalogą
traukinio_duomenys = traukinio_duomenys.flow_from_directory (katalogas=r'/content/drive/MyDrive/cats_and_dogs_filtered/train',
target_size=(64, 64),
partijos_dydis=32,
class_mode='dvejetainis')

Sukurkite kitą DirectoryIterator objektą iš testavimo katalogo. Nustatykite parametrus į tas pačias reikšmes kaip ir treniruočių duomenų.

# apibrėžiantis testavimo katalogą
testo_duomenys = test_datagen.flow_from_directory (katalogas=„/content/drive/MyDrive/cats_and_dogs_filtered/test“,
target_size=(64, 64),
partijos_dydis=32,
class_mode='dvejetainis')

Sukurkite finalą DirectoryIterator objektą iš patvirtinimo katalogo. Parametrai išlieka tokie patys kaip ir mokymo ir testavimo duomenų.

# apibrėžiantis patvirtinimo katalogą
patvirtinimo_duomenys = patvirtinimo_duomenys.flow_from_directory (katalogas=„/content/drive/MyDrive/cats_and_dogs_filtered/validation“,
target_size=(64, 64),
partijos_dydis=32,
class_mode='dvejetainis')

Katalogų iteratoriai nepapildo patvirtinimo ir testavimo duomenų rinkinių.

Jūsų modelio apibrėžimas

Apibrėžkite savo neuroninio tinklo architektūrą. Naudoti Konvoliucinis neuroninis tinklas (CNN). CNN sukurtos atpažinti vaizdų modelius ir ypatybes.

modelis = nuoseklus ()

# konvoliucinis sluoksnis su 32 3x3 dydžio filtrais
model.add (Conv2D(32, (3, 3), aktyvinimas='relu', input_shape=(64, 64, 3)))

# maksimalus baseino sluoksnis su baseino dydžiu 2x2
model.add (MaxPooling2D(pool_size=(2, 2)))

# konvoliucinis sluoksnis su 64 3x3 dydžio filtrais
model.add (Conv2D(64, (3, 3), aktyvinimas='relu'))

# maksimalus baseino sluoksnis su baseino dydžiu 2x2
model.add (MaxPooling2D(pool_size=(2, 2)))

# išlyginti konvoliucijos ir telkimo sluoksnių išvestį
model.add (išlyginti ())

# visiškai prijungtas sluoksnis su 128 vienetais ir ReLU aktyvacija
model.add (Tankus(128, aktyvinimas='relu'))

# atsitiktinai išmeskite 50% vienetų, kad išvengtumėte permontavimo
model.add (Dropout(0.5))

# išvesties sluoksnis su sigmoidiniu aktyvavimu (dvejetainė klasifikacija)
model.add (Tankus(1, aktyvinimas="sigmoidas"))

Sukompiliuokite modelį naudodami dvejetainį kryžminė entropija praradimo funkcija. Dvejetainės klasifikacijos problemos dažniausiai naudoja ją. Norėdami optimizuoti, naudokite Adomo optimizatorius. Tai adaptyvus mokymosi greičio optimizavimo algoritmas. Galiausiai įvertinkite modelį pagal tikslumą.

model.compile (loss='binary_crossentropy', optimizatorius='adomas', metrika=["tikslumas"])

Konsolėje atspausdinkite modelio architektūros santrauką.

model.summary()

Toliau pateiktoje ekrano kopijoje parodyta modelio architektūros vizualizacija.

Tai suteikia jums apžvalgą, kaip atrodo jūsų modelio dizainas.

Savo modelio mokymas

Treniruokite modelį naudodami tinka () metodas. Nustatykite žingsnių skaičių per epochą taip, kad mokymo pavyzdžių skaičius būtų padalintas iš partijos_dydis. Taip pat nustatykite patvirtinimo duomenis ir patvirtinimo žingsnių skaičių.

# Treniruokite modelį pagal mokymo duomenis
istorija = modelis.fit (traukinio_duomenys,
steps_per_epoch=train_data.n // train_data.batch_size,
epochos =50,
validation_data=validation_data,
validation_steps=validation_data.n // validation_data.batch_size)

The ImageDataGenerator klasė taiko duomenų papildymą treniruočių duomenims realiu laiku. Dėl to modelio mokymo procesas sulėtėja.

Jūsų modelio įvertinimas

Įvertinkite savo modelio našumą pagal bandymo duomenis naudodami įvertinti() metodas. Taip pat į konsolę atspausdinkite bandymo praradimą ir tikslumą.

test_loss, test_acc = model.evaluate (test_data,
Steps=test_data.n // test_data.batch_size)
spausdinti (f'Test praradimas: {test_loss}')
spausdinti (f'testo tikslumas: {test_acc}')

Toliau pateiktoje ekrano kopijoje rodomas modelio veikimas.

Modelis pakankamai gerai veikia naudojant niekada nematytus duomenis.

Kai paleidžiate kodą, kuris neįgyvendina duomenų papildymo metodų, modelio mokymo tikslumas yra 1. Tai reiškia, kad jis per daug tinka. Jis taip pat prastai veikia su duomenimis, kurių dar niekada nematė. Taip yra todėl, kad jis sužino duomenų rinkinio ypatumus.

Kada duomenų papildymas nėra naudingas?

  • Kai duomenų rinkinys jau įvairus ir didelis: duomenų papildymas padidina duomenų rinkinio dydį ir įvairovę. Jei duomenų rinkinys jau didelis ir įvairus, duomenų papildymas nebus naudingas.
  • Kai duomenų rinkinys per mažas: Duomenų papildymas negali sukurti naujų funkcijų, kurių nėra pradiniame duomenų rinkinyje. Todėl jis negali kompensuoti mažo duomenų rinkinio, kuriame trūksta daugumos funkcijų, kurias modelis turi išmokti.
  • Kai duomenų papildymo tipas yra netinkamas: Pavyzdžiui, pasukami vaizdai gali būti nenaudingi, kai svarbi objektų orientacija.

Ką gali „TensorFlow“.

TensorFlow yra įvairi ir galinga biblioteka. Jis gali treniruoti sudėtingus giluminio mokymosi modelius ir gali veikti įvairiuose įrenginiuose nuo išmaniųjų telefonų iki serverių grupių. Tai padėjo sukurti galingus skaičiavimo įrenginius, kuriuose naudojamas mašininis mokymasis.