Vältige ülepaigutamist ja suurendage oma masinõppemudeli täpsust, rakendades TensorFlow andmete suurendamise meetodeid.

Andmete suurendamine on koolitusandmetele erinevate teisenduste rakendamise protsess. See aitab suurendada andmestiku mitmekesisust ja vältida ülepaigutamist. Ülesobitamine toimub enamasti siis, kui teil on mudeli treenimiseks piiratud andmeid.

Siit saate teada, kuidas kasutada TensorFlow andmete suurendamise moodulit oma andmekogumi mitmekesistamiseks. See hoiab ära ülepaigutamise, genereerides uusi andmepunkte, mis erinevad pisut algandmetest.

Näidisandmekogum, mida te kasutate

Kasutate kasside ja koerte andmestikku Kaggle. See andmekogum sisaldab umbes 3000 kasside ja koerte pilti. Need pildid on jagatud koolitus-, testimis- ja valideerimiskomplektideks.

Silt 1.0 tähistab koera, silt 0.0 aga kassi.

Andmete suurendamise tehnikaid rakendav täielik lähtekood ja see, mis seda ei kasuta, on saadaval a GitHubi hoidla.

TensorFlow installimine ja importimine

Järgimiseks peaks teil olema a

instagram viewer
põhiteadmised Pythonist. Samuti peaksid teil olema algteadmised masinõppest. Kui vajate värskendust, võiksite kaaluda mõne selle järgimist masinõppe õpetused.

Avatud Google Colab. Muutke käitusaja tüübiks GPU. Seejärel käivitage TensorFlow oma keskkonda installimiseks esimeses koodilahtris järgmine võlukäsk.

!pip install tensorflow

Importige TensorFlow ja selle asjakohased moodulid ja klassid.

importida tensorflow nagu tf
alates tensorflow.keras.preprocessing.image importida ImageDataGenerator
alates tensorflow.keras.models importida Järjestikused
alates tensorflow.keras.layers importida Conv2D, MaxPooling2D, lame, tihe, väljalangemine

The tensorflow.keras.preprocessing.image võimaldab teil oma andmekogumis andmeid täiendada.

ImageDataGenerator klassi eksemplaride loomine

Loo eksemplar ImageDataGenerator klassi rongi andmete jaoks. Kasutate seda objekti treeningandmete eeltöötluseks. See genereerib mudelitreeningu ajal reaalajas täiendatud pildiandmeid.

Kassi või koera kujutise klassifitseerimise ülesandes saate kasutada ümberpööramise, juhusliku laiuse, juhusliku kõrguse, juhusliku heleduse ja suumimise andmete suurendamise tehnikaid. Need tehnikad genereerivad uusi andmeid, mis sisaldavad tegelikke stsenaariume esindavate algandmete variatsioone.

# määrake treeningu jaoks pildiandmete generaator
train_datagen = ImageDataGenerator (rescale=1./255,
horizontal_flip=Tõsi,
laiuse_nihke_vahemik=0.2,
kõrgus_nihke_vahemik=0.2,
brightness_range=[0.2,1.0],
zoom_range=0.2)

Looge teine ​​eksemplar ImageDataGenerator klassi katseandmete jaoks. Teil läheb vaja skaleerida ümber parameeter. See normaliseerib testpiltide pikslite väärtused, et need vastaksid treeningu ajal kasutatud vormingule.

# määrake testimiseks pildiandmete generaator
test_datagen = ImageDataGenerator (rescale=1./255)

Looge viimane eksemplar ImageDataGenerator klassi valideerimisandmete jaoks. Valideerimisandmete skaalat muutke samamoodi nagu testandmeid.

# määrake valideerimiseks pildiandmete generaator
validation_datagen = ImageDataGenerator (rescale=1./255)

Te ei pea katse- ja valideerimisandmetele muid suurendamistehnikaid rakendama. Seda seetõttu, et mudel kasutab testi- ja valideerimisandmeid ainult hindamise eesmärgil. Need peaksid kajastama esialgset andmete jaotust.

Teie andmete laadimine

Loo DirectoryIterator objekt koolituskataloogist. See loob täiendatud kujutiste partiid. Seejärel määrake kataloog, mis salvestab treeninguandmeid. Muutke piltide suurust fikseeritud suurusele 64x64 pikslit. Määrake piltide arv, mida iga partii kasutab. Lõpuks määrake sildi tüüp binaarne (st kass või koer).

# koolituskataloogi määratlemine
rongi_andmed = rongi_andmed.voog_kataloogist (kataloog=r'/content/drive/MyDrive/cats_and_dogs_filtered/train',
target_size=(64, 64),
partii_suurus=32,
class_mode='binaarne')

Loo teine DirectoryIterator objekt testimiskataloogist. Määrake parameetrid samadele väärtustele, mis treeningandmetes.

# testimiskataloogi määratlemine
test_andmed = test_datagen.flow_from_directory (kataloog='/content/drive/MyDrive/cats_and_dogs_filtered/test',
target_size=(64, 64),
partii_suurus=32,
class_mode='binaarne')

Looge finaal DirectoryIterator objekti valideerimiskataloogist. Parameetrid jäävad samaks, mis koolituse ja testimise andmetel.

# valideerimiskataloogi määratlemine
valideerimisandmed = valideerimise_andmed.voog_kataloogist (kataloog='/content/drive/MyDrive/cats_and_dogs_filtered/validation',
target_size=(64, 64),
partii_suurus=32,
class_mode='binaarne')

Kataloogiiteraatorid ei täienda valideerimis- ja testiandmekogumeid.

Oma mudeli määratlemine

Määrake oma närvivõrgu arhitektuur. Kasuta Konvolutsiooniline närvivõrk (CNN). CNN-id on loodud piltide mustrite ja funktsioonide äratundmiseks.

mudel = järjestikune()

# konvolutsioonikiht 32 filtriga suurusega 3x3
model.add (Conv2D(32, (3, 3), aktiveerimine='relu', input_shape=(64, 64, 3)))

# max basseinikiht basseini suurusega 2x2
model.add (MaxPooling2D(pool_size=(2, 2)))

# konvolutsioonikiht 64 filtriga suurusega 3x3
model.add (Conv2D(64, (3, 3), aktiveerimine='relu'))

# max basseinikiht basseini suurusega 2x2
model.add (MaxPooling2D(pool_size=(2, 2)))

# tasandage konvolutsiooni- ja koondamiskihi väljund
model.add (Flatten())

# täielikult ühendatud kiht 128 ühikuga ja ReLU aktiveerimine
model.add (Tihe(128, aktiveerimine='relu'))

# jätke 50% seadmetest juhuslikult välja, et vältida ülepaigutamist
model.add (Dropout(0.5))

# sigmoidse aktiveerimisega väljundkiht (binaarne klassifikatsioon)
model.add (Tihe(1, aktiveerimine='sigmoid'))

Koostage mudel kahendkoodi abil ristentroopia kaotusfunktsioon. Binaarse klassifikatsiooni probleemid kasutavad seda tavaliselt. Optimeerija jaoks kasutage Adam optimeerija. See on adaptiivne õppimiskiiruse optimeerimise algoritm. Lõpuks hinnake mudeli täpsust.

model.comile (kaotus='binary_crossentropy', optimeerija='adam', mõõdikud=['täpsus'])

Printige konsooli mudeli arhitektuuri kokkuvõte.

model.summary()

Järgmine ekraanipilt näitab mudeli arhitektuuri visualiseerimist.

See annab teile ülevaate sellest, kuidas teie mudeli disain välja näeb.

Oma modelli koolitamine

Treenige mudelit kasutades sobib () meetod. Määrake sammude arvuks epohhi kohta treeningnäidiste arv jagatud arvuga partii_suurus. Määrake ka valideerimisandmed ja valideerimisetappide arv.

# Treenige mudelit treeningandmete põhjal
ajalugu = model.fit (train_data,
steps_per_epoch=train_data.n // train_data.batch_size,
ajastud =50,
validation_data=validation_data,
validation_steps=validation_data.n // validation_data.batch_size)

The ImageDataGenerator klass rakendab treeningandmetele reaalajas andmete suurendamist. See muudab modelli treeningprotsessi aeglasemaks.

Teie mudeli hindamine

Hinnake oma mudeli toimivust katseandmete põhjal, kasutades hindama () meetod. Samuti printige konsooli testi kadu ja täpsus.

test_loss, test_acc = model.evaluate (test_data,
steps=test_data.n // test_data.batch_size)
print(f'Testi kaotus: {test_loss}')
print(f'Testi täpsus: {test_acc}')

Järgmine ekraanipilt näitab mudeli jõudlust.

Mudel toimib kunagi nähtud andmetel suhteliselt hästi.

Kui käivitate koodi, mis ei rakenda andmete suurendamise tehnikaid, on mudeli koolituse täpsus 1. Mis tähendab, et see sobib üle. See toimib halvasti ka andmete puhul, mida ta pole kunagi varem näinud. Seda seetõttu, et see õpib ära andmestiku iseärasused.

Millal pole andmete suurendamine kasulik?

  • Kui andmestik on juba mitmekesine ja suur: andmete suurendamine suurendab andmestiku suurust ja mitmekesisust. Kui andmestik on juba suur ja mitmekesine, pole andmete suurendamine kasulik.
  • Kui andmestik on liiga väike: andmete suurendamine ei saa luua uusi funktsioone, mida algses andmekogumis pole. Seetõttu ei saa see kompenseerida väikest andmekogumit, millel puudub enamik funktsioone, mida mudel vajab õppimiseks.
  • Kui andmete suurendamise tüüp on sobimatu: Näiteks ei pruugi piltide pööramisest abi olla, kui objektide suund on oluline.

Milleks TensorFlow on võimeline?

TensorFlow on mitmekesine ja võimas raamatukogu. See on võimeline treenima keerulisi süvaõppe mudeleid ja seda saab kasutada mitmesugustes seadmetes nutitelefonidest serveriklastriteni. See on aidanud toita masinõpet kasutavaid arvutusseadmeid.