Rozšírenie údajov Ako používať program Deep Learning, ak máte obmedzené údaje - časť 2

Tento článok predstavuje komplexný prehľad techník rozširovania údajov pre Deep Learning, ktoré sú špecifické pre obrázky. Toto je časť 2 Ako používať program Deep Learning, ak máte obmedzené údaje. Pokladňa 1. časť tu.

Všetci sme tam boli. Máte hviezdny koncept, ktorý je možné implementovať pomocou modelu strojového učenia. Ak sa cítite dobre, otvoríte webový prehľadávač a vyhľadáte relevantné údaje. Je pravdepodobné, že nájdete súbor údajov, ktorý má okolo niekoľko stoviek obrázkov.

Spomínate si, že najobľúbenejšie súbory údajov majú obrázky rádovo desiatky tisíc (alebo viac). Pripomínate tiež niekoho, kto sa zmienil, že má veľký súbor údajov, je rozhodujúci pre dobrý výkon. Cítite sa sklamaní. dokáže moja „najmodernejšia“ neurónová sieť dobre fungovať s malým množstvom údajov, ktoré mám?

Odpoveď znie, áno! Ale predtým, ako sa dostaneme do kúzla, že sa to stane, musíme sa zamyslieť nad niektorými základnými otázkami.

Prečo je potrebné veľké množstvo údajov?

Počet parametrov (v miliónoch) pre populárne neurónové siete.

Keď trénujete model strojového učenia, skutočne robíte vyladenie jeho parametrov tak, aby bolo možné priradiť konkrétny vstup (povedzme obrázok) k určitému výstupu (štítok). Naším cieľom optimalizácie je prenasledovať sladké miesto, kde je strata nášho modelu nízka, čo sa stane, keď sú vaše parametre správne naladené.

Najmodernejšie neurónové siete majú spravidla parametre rádovo milióny!

Ak máte veľa parametrov, musíte na to, aby ste dosiahli dobrý výkon, ukázať svojmu strojovému modelu úmerné množstvo príkladov. Počet potrebných parametrov je tiež úmerný zložitosti úlohy, ktorú musí váš model vykonať.

Ako získam viac údajov, ak nemám „viac údajov“?

Nemusíte hľadať nové nové obrázky, ktoré môžete pridať do vašej množiny údajov. Prečo? Pretože neurónové siete nie sú na začiatku chytré. Napríklad zle vycvičená neurónová sieť by si myslela, že tieto tri tenisové loptičky zobrazené nižšie sú jedinečnými a jedinečnými obrázkami.

Rovnaký tenisový loptu, ale preložený.

Aby sme získali viac údajov, stačí urobiť menšie zmeny v našom existujúcom súbore údajov. Drobné zmeny, ako sú prevrátenia alebo preklady alebo rotácie. Naša nervová sieť by si napriek tomu myslela, že ide o zreteľné obrazy.

Rozšírenie dát v hre

Konvolučná neurónová sieť, ktorá dokáže robustne klasifikovať objekty, aj keď je umiestnená v rôznych orientáciách, má vlastnosť nazývanú invariance. Konkrétnejšie, CNN môže byť invariantný k prekladu, pohľadu, veľkosti alebo osvetleniu (alebo kombináciou vyššie uvedeného).

Toto je v podstate predpoklad rozšírenia údajov. V scenári skutočného sveta môžeme mať súbor údajov o snímkach zhotovených v obmedzenom súbore podmienok. Avšak naša cieľová aplikácia môže existovať v rôznych podmienkach, ako je rôzna orientácia, umiestnenie, mierka, jas atď. Za tieto situácie zodpovedáme školením našej neurónovej siete ďalšími synteticky modifikovanými údajmi.

Môže rozšírenie pomôcť, aj keď mám veľa údajov?

Áno. Môže to pomôcť zvýšiť množstvo relevantných údajov vo vašom súbore údajov. Súvisí to so spôsobom, akým sa neurónové siete učia. Dovoľte mi to ilustrovať príkladom.

Tieto dve triedy v našom hypotetickom súbore údajov. Jeden vľavo predstavuje značku A (Ford) a druhý vľavo predstavuje značku B (Chevrolet).

Predstavte si, že máte súbor údajov pozostávajúci z dvoch značiek automobilov, ako je uvedené vyššie. Predpokladajme, že všetky autá značky A sú zarovnané presne ako obrázok vľavo (t. J. Všetky autá smerujú doľava). Podobne sú všetky vozidlá značky B zarovnané presne ako na obrázku vpravo (t. J. Napravo). Teraz tento súbor údajov vložíte do svojej „najmodernejšej“ neurónovej siete a dúfate, že po vyškolení získate pôsobivé výsledky.

Ford Ford (značka A), ale otočený doprava.

Povedzme, že je to školenie a vy nakŕmite obrázok hore, ktorý je autom značky A. Ale vaša neurónová sieť produkuje, že je to auto značky B! Ste zmätení. Dosiahli ste iba 95% presnosť vášho súboru údajov pomocou svojej „najmodernejšej“ neurónovej siete? Nie som preháňaný, v minulosti sa vyskytli podobné incidenty a škvrnky.

Prečo sa to stalo? Stáva sa to preto, lebo takto funguje väčšina algoritmov strojového učenia. Nájde najzreteľnejšie vlastnosti, ktoré odlišujú jednu triedu od druhej. V tomto prípade to bolo, že všetky autá značky A smerovali doľava a všetky autá značky B smerovali doprava.

Vaša neurónová sieť je taká dobrá ako dáta, ktoré jej dávate.

Ako tomu zabrániť? Musíme znížiť množstvo irelevantných funkcií v súbore údajov. Pre náš klasifikátor modelov automobilov vyššie by bolo jednoduchým riešením pridať obrázky automobilov oboch tried, ktoré smerujú iným smerom k nášmu pôvodnému súboru údajov. Ešte lepšie je, že obrázky v existujúcom súbore údajov môžete vodorovne prevrátiť tak, aby smerovali na druhú stranu! Pri školení neurónovej siete o tomto novom súbore údajov získate výkon, ktorý ste chceli dosiahnuť.

Vykonaním rozšírenia môžete zabrániť svojej neurónovej sieti v učení sa irelevantných vzorcov, čo v podstate zvyšuje celkový výkon.

Začíname

Predtým, ako sa ponoríme do rôznych augmentačných techník, musíme si vopred zvážiť jeden problém.

Kde rozširujeme údaje v našom plynovode ML?

Odpoveď sa môže zdať celkom zrejmá; robíme zväčšenie skôr, ako vložíme údaje do modelu, nie? Áno, ale máte dve možnosti. Jednou z možností je vykonať všetky potrebné transformácie vopred, čím sa podstatne zvýši veľkosť súboru údajov. Druhou možnosťou je vykonať tieto transformácie na minidávke, tesne pred ich zavedením do vášho modelu strojového učenia.

Prvá možnosť je známa ako rozšírenie offline. Táto metóda je preferovaná pre relatívne menšie množiny údajov, pretože by ste nakoniec zvýšili veľkosť množiny údajov o faktor rovnajúci sa počtu vykonaných transformácií (napríklad prevrátením všetkých mojich obrázkov by som zväčšil veľkosť môjho množiny údajov o faktor 2).

Druhá možnosť je známa ako online augmentácia alebo augmentácia za behu. Táto metóda je uprednostňovaná pre väčšie množiny údajov, pretože si nemôžete dovoliť explozívne zväčšenie veľkosti. Namiesto toho by ste vykonali transformácie na mini-šarže, ktoré by ste kŕmili do svojho modelu. Niektoré rámce strojového učenia majú podporu pre online rozširovanie, ktoré je možné na GPU urýchliť.

Populárne augmentačné techniky

V tejto časti uvádzame niektoré základné, ale výkonné techniky rozšírenia, ktoré sa bežne používajú. Predtým, ako preskúmame tieto techniky, pre jednoduchosť, urobme jeden predpoklad. Predpokladáme, že nemusíme uvažovať o tom, čo leží za hranicou obrázka. Použijeme nižšie uvedené techniky, aby náš predpoklad bol platný.

Čo by sa stalo, keby sme použili techniku, ktorá nás núti uhádnuť, čo leží za hranicou obrázka? V tomto prípade musíme interpolovať niektoré informácie. Po tom, čo sa zaoberáme typmi rozšírenia, budeme o tom diskutovať podrobne.

Pre každú z týchto techník tiež špecifikujeme faktor, o ktorý by sa zvýšila veľkosť vášho súboru údajov (aka. Data Augmentation Factor).

1. Prevrátiť

Obrázky môžete prevrátiť horizontálne aj vertikálne. Niektoré rámce neposkytujú funkciu pre vertikálne prevrátenie. Vertikálne preklopenie je však ekvivalentné otočeniu obrázka o 180 stupňov a následnému horizontálnemu preklopeniu. Nižšie sú uvedené príklady obrázkov, ktoré sa prevrátia.

Zľava máme pôvodný obrázok, nasledovaný obrázkom horizontálne prevráteným a potom obrázok vertikálne prevrátený.

Prepínanie môžete vykonať pomocou ktoréhokoľvek z nasledujúcich príkazov z obľúbených balíkov. Faktor zväčšenia údajov = 2 až 4x

# NumPy.'img '= Jeden obrázok.
flip_1 = np.fliplr (img)
# TensorFlow. 'x' = zástupný symbol pre obrázok.
shape = [výška, šírka, kanály]
x = tf.placeholder (dtype = tf.float32, shape = shape)
flip_2 = tf.image.flip_up_down (x)
flip_3 = tf.image.flip_left_right (x)
flip_4 = tf.image.random_flip_up_down (x)
flip_5 = tf.image.random_flip_left_right (x)

2. Rotácia

Jednou z kľúčových vecí, ktorú treba poznamenať o tejto operácii, je skutočnosť, že po otočení sa rozmery obrázka nemusia zachovať. Ak je váš obrázok štvorec, jeho otáčanie v pravom uhle zachová jeho veľkosť. Ak je to obdĺžnik, jeho rotácia o 180 stupňov by zachovala jeho veľkosť. Otočením obrázka o jemnejšie uhly sa zmení aj konečná veľkosť obrázka. V nasledujúcej sekcii uvidíme, ako sa s týmto problémom môžeme vysporiadať. Nižšie sú uvedené príklady štvorcových obrázkov otočených v pravom uhle.

Pri pohybe zľava doprava sa obrázky otáčajú o 90 stupňov v smere hodinových ručičiek oproti predchádzajúcemu.

Striedanie môžete vykonávať pomocou ktoréhokoľvek z nasledujúcich príkazov z obľúbených balíkov. Faktor zväčšenia údajov = 2 až 4x

# Zástupné symboly: 'x' = Jeden obrázok, 'y' = Dávka obrázkov
# 'k' označuje počet otočení proti smeru hodinových ručičiek o 90 stupňov
shape = [výška, šírka, kanály]
x = tf.placeholder (dtype = tf.float32, shape = shape)
rot_90 = tf.image.rot90 (img, k = 1)
rot_180 = tf.image.rot90 (img, k = 2)
# Otočenie v akomkoľvek uhle. V nasledujúcom príklade sú „uhly“ v radiánoch
shape = [šarža, výška, šírka, 3]
y = tf.placeholder (dtype = tf.float32, shape = shape)
rot_tf_180 = tf.contrib.image.rotate (y, uhly = 3,1415)
# Scikit-Image. 'uhol' = stupne. 'img' = Vstupný obrázok
# Ak chcete získať viac podrobností o režime, pozrite si nižšie uvedenú časť o interpolácii.
rot = skimage.transform.rotate (img, angle = 45, mode = 'reflect')

3. Stupnica

Obrázok môže byť zmenšený smerom von alebo dovnútra. Pri mierke smerom von bude konečná veľkosť obrázka väčšia ako pôvodná veľkosť obrázka. Väčšina rámcov snímky vystrihne časť nového obrázka s veľkosťou rovnakou ako pôvodný obrázok. V ďalšej časti sa budeme zaoberať škálovaním smerom dovnútra, pretože to zmenší veľkosť obrázka, čo nás núti robiť predpoklady o tom, čo leží za hranicou. Nižšie sú uvedené príklady alebo obrázky v mierke.

Zľava máme pôvodný obrázok, obrázok sa zmenšil smerom von o 10% a obrázok sa zmenšil smerom von o 20%

Prispôsobenie môžete vykonať pomocou nasledujúcich príkazov pomocou scikit-image. Faktor zväčšenia údajov = ľubovoľný.

# Scikit Obrázok. 'img' = Vstupný obrázok, 'mierka' = Mierka mierky
# Ak chcete získať viac podrobností o režime, pozrite si nižšie uvedenú časť o interpolácii.
scale_out = skimage.transform.rescale (img, scale = 2.0, mode = 'Constant')
scale_in = skimage.transform.rescale (img, scale = 0,5, mode = 'Constant')
# Nezabudnite orezať obrázky späť do pôvodnej veľkosti (pre
# škálovanie)

4. Orez

Na rozdiel od mierky iba náhodne vzorkujeme časť z pôvodného obrázka. Potom zmeníme veľkosť tejto časti na pôvodnú veľkosť obrázka. Táto metóda je všeobecne známa ako náhodné orezanie. Nižšie sú uvedené príklady náhodného orezania. Ak sa pozriete pozorne, môžete si všimnúť rozdiel medzi touto metódou a mierkou.

Zľava máme pôvodný obrázok, štvorcový výrez orezaný zľava hore a potom pravý dolný výrez. Orezané časti sa zmenili na pôvodnú veľkosť obrázka.

Náhodné plodiny môžete vykonávať pomocou ktoréhokoľvek z nasledujúcich príkazov pre TensorFlow. Faktor zväčšenia údajov = ľubovoľný.

# TensorFlow. 'x' = zástupný symbol pre obrázok.
original_size = [výška, šírka, kanály]
x = tf.placeholder (dtype = tf.float32, shape = original_size)
# Použite nasledujúce príkazy na vykonanie náhodných plodín
crop_size = [new_height, new_width, kanály]
seed = np.random.randint (1234)
x = tf.random_crop (x, size = crop_size, seed = seed)
output = tf.images.resize_images (x, size = original_size)

5. Preklad

Preklad vyžaduje iba presunutie obrazu v smere X alebo Y (alebo oboje). V nasledujúcom príklade predpokladáme, že obrázok má čierne pozadie za hranicami a je správne preložený. Tento spôsob zväčšenia je veľmi užitočný, pretože väčšina objektov môže byť umiestnená takmer kdekoľvek na obrázku. Toto núti vašu konvolučnú neurónovú sieť hľadať všade.

Zľava máme pôvodný obrázok, obrázok preložený doprava a obrázok preložený nahor.

Preklady v TensorFlow môžete vykonávať pomocou nasledujúcich príkazov. Faktor zväčšenia údajov = ľubovoľný.

# pad_left, pad_right, pad_top, pad_bottom označujú pixel
# výtlak. Jeden z nich nastavte na požadovanú hodnotu a zvyšok na 0
shape = [šarža, výška, šírka, kanály]
x = tf.placeholder (dtype = tf.float32, shape = shape)
# Používame dve funkcie, aby sme dosiahli požadované rozšírenie
x = tf.image.pad_to_bounding_box (x, pad_top, pad_left, výška + pad_bottom + pad_top, šírka + pad_right + pad_left)
output = tf.image.crop_to_bounding_box (x, pad_bottom, pad_right, výška, šírka)

6. Gaussovský hluk

K preplneniu zvyčajne dochádza, keď sa vaša neurónová sieť pokúša naučiť vysokofrekvenčné funkcie (vzory, ktoré sa vyskytujú veľa), ktoré nemusia byť užitočné. Gaussov šum, ktorý má nulovú strednú hodnotu, má v podstate dátové body na všetkých frekvenciách, čo efektívne skresľuje vysokofrekvenčné vlastnosti. To tiež znamená, že komponenty s nižšou frekvenciou (zvyčajne vaše zamýšľané údaje) sú tiež skreslené, ale vaša nervová sieť sa to môže naučiť prekonať. Pridanie správneho množstva hluku môže zlepšiť schopnosť učiť sa.

Tónovanou verziou tohto je šum a soľ a korenie, ktorý sa prezentuje ako náhodný čierny a biely pixel rozložený po obrázku. Je to podobné efektu spôsobenému pridaním gaussovského šumu k obrázku, ale môže mať nižšiu úroveň skreslenia informácií.

Zľava máme pôvodný obrázok, obrázok s pridaným gaussovským šumom, obrázok s pridaným šumom solí a korenia

Gaussovský šum môžete do svojho obrázka pridať pomocou nasledujúceho príkazu na TensorFlow. Faktor zväčšenia údajov = 2x.

#TensorFlow. 'x' = zástupný symbol pre obrázok.
shape = [výška, šírka, kanály]
x = tf.placeholder (dtype = tf.float32, shape = shape)
# Pridanie gaussovského šumu
noise = tf.random_normal (shape = tf.shape (x), mean = 0.0, stddev = 1.0,
dtype = tf.float32)
výstup = tf.add (x, šum)

Pokročilé augmentačné techniky

V skutočnom svete môžu prírodné dáta stále existovať v rôznych podmienkach, ktoré sa nedajú vysvetliť vyššie uvedenými jednoduchými metódami. Napríklad vezmime úlohu identifikácie krajiny na fotografii. Krajina môže byť čokoľvek: mrazivé tundry, trávne porasty, lesy atď. Znie to ako celkom priama klasifikačná úloha, však? Mali by ste pravdu, až na jednu vec. Na fotografiách prehliadame zásadný prvok, ktorý by ovplyvnil výkon - obdobie, v ktorom bola fotografia nasnímaná.

Ak naša nervová sieť nechápe skutočnosť, že určité krajiny môžu existovať v rôznych podmienkach (sneh, vlhkosť, jasno atď.), Môže rušivo označovať zamrznuté jazerá ako ľadovce alebo mokré polia ako močiare.

Jedným zo spôsobov, ako zmierniť túto situáciu, je pridať ďalšie obrázky, aby sme zodpovedali za všetky sezónne zmeny. Ale to je náročná úloha. Predstavte si, ako by bolo rozšírenie našej koncepcie rozšírenia údajov umelé generovať efekty, ako sú rôzne ročné obdobia, umelo?

Podmienené GAN pre záchranu!

Bez toho, aby sme prešli do podrobností, podmienené GAN môžu transformovať obraz z jednej domény na obraz do inej domény. Ak si myslíte, že to znie príliš vágne, nie je to; to je doslova také silné, ako táto neurónová sieť je! Nižšie je uvedený príklad podmienených GAN používaných na transformáciu fotografií letných scenérií na zimné scenérie.

Zmena ročného obdobia pomocou CycleGAN (Zdroj: https://junyanz.github.io/CycleGAN/)

Vyššie uvedená metóda je robustná, ale výpočtovo náročná. Lacnejšou alternatívou by bolo niečo, čo sa nazýva prenos nervového štýlu. Zachytáva textúru / atmosféru / vzhľad jedného obrázka (známy ako „štýl“) a mieša ho s obsahom iného. Použitím tejto výkonnej techniky vytvárame efekt podobný nášmu podmienenému GAN (táto metóda bola v skutočnosti zavedená pred vynájdením cGAN!).

Jedinou nevýhodou tejto metódy je, že výstup má tendenciu vyzerať skôr umelecky ako realisticky. Existujú však určité vylepšenia, ako napríklad Deep Photo Style Transfer, zobrazené nižšie, ktoré majú pôsobivé výsledky.

Hlboký prenos fotografického štýlu. Všimnite si, ako by sme mohli vygenerovať požadovaný efekt na náš súbor údajov. (Zdroj: https://arxiv.org/abs/1703.07511)

Tieto techniky sme do hĺbky nepreskúmali, pretože sa nezaoberáme ich vnútornou prácou. Môžeme použiť existujúce vyškolené modely spolu s mágiou transferového učenia na ich rozšírenie.

Stručná poznámka o interpolácii

Čo keby ste chceli preložiť obrázok, ktorý nemá čierne pozadie? Čo ak by ste chceli mieriť dovnútra? Alebo sa otáčajte v jemnejších uhloch? Po vykonaní týchto transformácií musíme zachovať pôvodnú veľkosť obrázka. Keďže náš obrázok nemá žiadne informácie o veciach mimo svojich hraníc, musíme urobiť niekoľko predpokladov. Obvykle sa priestor za hranicou obrázka považuje za konštantnú 0 v každom bode. Keď teda urobíte tieto transformácie, získate čiernu oblasť, kde obraz nie je definovaný.

Zľava sa obrázok otočil o 45 stupňov proti smeru hodinových ručičiek, obrázok sa preložil doprava a obrázok sa upravil dovnútra.

Je to však správny predpoklad? V scenári reálneho sveta je to väčšinou nie. Spracovanie obrazu a rámce ML majú niektoré štandardné spôsoby, pomocou ktorých sa môžete rozhodnúť, ako vyplniť neznámy priestor. Sú definované nasledovne.

Zľava máme režimy konštantný, okrajový, odrazový, symetrický a obtiažny.

1. Konštantná

Najjednoduchšou metódou interpolácie je vyplniť neznámu oblasť nejakou konštantnou hodnotou. Nemusí to fungovať pre prirodzené obrázky, ale môže to fungovať pre snímky nasnímané na monochromatickom pozadí

2. Okraj

Hraničné hodnoty obrázka sú za hranicou predĺžené. Táto metóda môže pracovať pre mierne preklady.

3. Odrážať

Hodnoty obrazových pixlov sa odrážajú pozdĺž hranice obrázka. Táto metóda je užitočná pre nepretržité alebo prirodzené pozadie obsahujúce stromy, hory atď.

4. Symetrické

Táto metóda je podobná ako odraz, s výnimkou skutočnosti, že na hranici odrazu sa vytvára kópia okrajových pixelov. Za normálnych okolností je možné odraziť a symetricky použiť zameniteľne, ale rozdiely sa prejavia pri riešení veľmi malých obrázkov alebo vzorov.

5. Zabalte

Obrázok sa len opakuje za jeho hranicami, akoby sa kachľoval. Táto metóda sa nepoužíva tak populárne ako ostatné, pretože to nedáva zmysel pre veľa scenárov.

Okrem toho si môžete navrhnúť svoje vlastné metódy na riešenie nedefinovaného priestoru, ale zvyčajne by tieto metódy vyhovovali väčšine klasifikačných problémov.

Takže, ak použijem VŠETKY z týchto techník, môj algoritmus ML by bol v poriadku?

Ak ho používate správnym spôsobom, potom áno! Aký je správny spôsob, ako sa pýtate? Niekedy nie všetky techniky rozširovania majú zmysel pre súbor údajov. Zoberme si znova príklad nášho auta. Nižšie sú uvedené niektoré spôsoby, ako môžete obrázok upraviť.

Prvý obrázok (zľava) je originál, druhý je horizontálne prevrátený, tretí sa otočí o 180 stupňov a posledný sa otočí o 90 stupňov (v smere hodinových ručičiek).

Iste, sú to obrázky toho istého automobilu, ale vaša cieľová aplikácia nemusí nikdy vidieť autá uvedené v týchto orientáciách.

Napríklad, ak práve klasifikujete náhodné autá na cestách, zmysel by mal byť iba na druhom obrázku. Ak však vlastníte poisťovňu, ktorá sa zaoberá dopravnými nehodami, a ak chcete zistiť aj modely hore nohami, rozbité autá, tretí obrázok má zmysel. Posledný obrázok nemusí mať zmysel pre obidva vyššie uvedené scenáre.

Ide o to, že pri použití techník rozširovania musíme zabezpečiť, aby sa nezvýšili irelevantné údaje.

Naozaj stojí za námahu?

Pravdepodobne očakávate, že niektoré výsledky vás budú motivovať k tomu, aby ste sa prešli ďalšou míľou. Dosť spravodlivé; Mám to tiež zakryté. Dovoľte mi dokázať, že zväčšenie naozaj funguje, napríklad pomocou hračky. Tento experiment môžete zopakovať a overiť.

Vytvorme dve neurónové siete na klasifikáciu údajov do jednej zo štyroch tried: mačky, leva, tigra alebo leoparda. Úlovok je, jeden nebude používať rozširovanie údajov, zatiaľ čo druhý bude. Odkaz na súbor údajov si môžete stiahnuť tu.

Ak ste skontrolovali dátový súbor, všimnete si, že na školenie aj testovanie existuje iba 50 obrázkov na triedu. Je zrejmé, že rozšírenie nemôžeme použiť pre jedného z klasifikátorov. Aby sme zvýšili férovosť, používame Transfer Learning, aby sme dali modelom lepšiu šancu s obmedzeným množstvom údajov.

Štyri triedy v našom súbore údajov.

Pre sieť bez rozšírenia používajme sieť VGG19. Tu som napísal implementáciu TensorFlow, ktorá je založená na tejto implementácii. Po klonovaní môjho repo môžete odtiaľ získať dataset a odtiaľ vgg19.npy (používa sa na prenos prenosu). Teraz môžete spustiť model na overenie výkonu.

Súhlasil by som však s tým, že vytvorenie dodatočného kódu na rozšírenie údajov je skutočne trochu úsilia. Takže, aby sme vytvorili náš druhý model, obrátil som sa na Nanonety. Interne používajú prenosové učenie a rozširovanie dát, aby dosiahli čo najlepšie výsledky s použitím minimálnych údajov. Všetko, čo musíte urobiť, je odovzdať údaje na ich webové stránky a počkajte, kým sa na ich serveroch nevyučia (zvyčajne okolo 30 minút). Čo viete, je to perfektné pre náš porovnávací experiment.

Po dokončení školenia môžete požiadať o volania do rozhrania API, aby ste mohli vypočítať presnosť testu. Pokúste sa vyhľadať ukážku útržku kódu v mojom repo (nezabudnite do útržku kódu vložiť ID svojho modelu).

výsledok
VGG19 (bez augmentácie) - 76% presnosť testu (najvyššia)
Nanonety (s augmentáciou) - presnosť testu 94,5%

Pôsobivé to nie je. Je pravda, že väčšina modelov funguje dobre s väčším počtom údajov. Aby som poskytol konkrétny dôkaz, spomenul som nasledujúcu tabuľku. Zobrazuje chybovosť populárnych neurónových sietí v súboroch údajov Cifar 10 (C10) a Cifar 100 (C100). Stĺpce C10 + a C100 + sú miery chybovosti s rozšírením údajov.

Miera chýb populárnych neurónových sietí v súboroch údajov Cifar 10 a Cifar 100. (Zdroj: DenseNet)

Ďakujeme vám za prečítanie tohto článku! Ak ste tak urobili, stlačte toto tlieskacie tlačidlo! Dúfam, že to vrhlo trochu svetla na rozširovanie údajov. Ak máte nejaké otázky, môžete ma kontaktovať na sociálnych sieťach alebo mi poslať e-mail (bharathrajn98@gmail.com).

O programoch Nanonets: Nanonets stavia API, aby zjednodušila vývojárom hlboké vzdelávanie. Navštívte nás na adrese https://www.nanonets.com, kde nájdete viac informácií)