Mărirea datelor | Cum să utilizați învățarea profundă atunci când aveți date limitate - partea a 2-a

Acest articol este o revizuire cuprinzătoare a tehnicilor de augmentare a datelor pentru învățare profundă, specifice imaginilor. Aceasta este partea 2 a Cum să utilizați învățarea profundă atunci când aveți date limitate. Finalizează partea 1 aici.

Cu toții am fost acolo. Aveți un concept stelar care poate fi implementat folosind un model de învățare automată. Simțindu-vă bine, îți deschizi browserul web și cauți date relevante. Este posibil să găsiți un set de date care are în jur de câteva sute de imagini.

Vă amintiți că cele mai populare seturi de date au imagini de ordinul a zeci de mii (sau mai multe). De asemenea, vă amintiți că cineva menționând că un set de date mare este esențial pentru performanțe bune. Simțindu-te dezamăgit, te întrebi; Poate rețeaua mea neuronală de ultimă generație să funcționeze bine cu cantitatea scăzută de date pe care o am?

Raspunsul este da! Dar înainte de a intra în magia de a face acest lucru, trebuie să ne gândim la câteva întrebări de bază.

De ce este nevoie de o cantitate mare de date?

Număr de parametri (în milioane), pentru rețele neuronale populare.

Când pregătiți un model de învățare automată, ceea ce faceți cu adevărat este să ajustați parametrii săi, astfel încât să poată asorta o anumită intrare (să zicem o imagine) la o ieșire (o etichetă) Scopul nostru de optimizare este să urmărim acel punct dulce în care pierderea modelului nostru este scăzută, ceea ce se întâmplă atunci când parametrii dvs. sunt reglați în mod corect.

Rețelele neuronale de ultimă generație au parametri de obicei de ordinul a milioane!

Desigur, dacă aveți o mulțime de parametri, ar trebui să arătați modelului dvs. de învățare în mașină o cantitate proporțională de exemple, pentru a obține performanțe bune. De asemenea, numărul de parametri de care aveți nevoie este proporțional cu complexitatea sarcinii pe care modelul dvs. trebuie să o îndeplinească.

Cum pot obține mai multe date, dacă nu am „mai multe date”?

Nu este necesar să căutați noi imagini noi care pot fi adăugate în setul dvs. de date. De ce? Deoarece, rețelele neuronale nu sunt inteligente pentru început. De exemplu, o rețea neuronală slab instruită ar crede că aceste trei mingi de tenis prezentate mai jos sunt imagini distincte și unice.

Aceeași minge de tenis, dar tradusă.

Așadar, pentru a obține mai multe date, trebuie doar să aducem modificări minore setului de date existent. Modificări minore, cum ar fi flipsuri sau traduceri sau rotiri. Rețeaua noastră neuronală ar crede că acestea sunt imagini distincte.

Mărirea datelor în joc

O rețea neuronală convoluțională care poate clasifica în mod robust obiectele, chiar dacă se spune că este plasată în diferite orientări, are proprietatea numită invarianță. Mai precis, un CNN poate fi invariabil la traducere, punct de vedere, dimensiune sau iluminare (Sau o combinație de mai sus).

Aceasta este în esență premisa creșterii datelor. În scenariul lumii reale, este posibil să avem un set de date de imagini luate într-un set limitat de condiții. Dar, aplicația noastră țintă poate exista într-o varietate de condiții, cum ar fi orientarea, locația, scala, luminozitatea etc.

Pot contribui la mărire chiar dacă am o mulțime de date?

Da. Poate ajuta la creșterea cantității de date relevante din setul dvs. de date. Aceasta este legată de modul în care rețelele neuronale învață. Permiteți-mi să o ilustrez cu un exemplu.

Cele două clase din setul nostru de date ipotetic. Cel din stânga reprezintă marca A (Ford), iar cel din dreapta reprezintă marca B (Chevrolet).

Imaginați-vă că aveți un set de date, format din două mărci de mașini, așa cum se arată mai sus. Să presupunem că toate automobilele de marca A sunt aliniate exact ca în imaginea din stânga (adică toate mașinile sunt orientate spre stânga). De asemenea, toate mașinile cu marca B sunt aliniate exact ca în imaginea din dreapta (adică spre dreapta). Acum, alimentați acest set de date la rețeaua dvs. neuronală „de ultimă generație” și sperăm să obțineți rezultate impresionante odată ce ați fost instruită.

O mașină Ford (marca A), dar orientată spre dreapta.

Să zicem că a fost pregătit și alimentați imaginea de mai sus, care este o mașină Brand A. Dar rețeaua dvs. neuronală arată că este o mașină marca B! Ești confuz. Nu ați obținut doar o precizie de 95% în setul dvs. de date utilizând rețeaua dvs. neuronală „de ultimă generație”? Nu exagerez, în trecut s-au produs incidente și apariții similare.

De ce se întâmplă asta? Se întâmplă pentru că așa funcționează majoritatea algoritmilor de învățare automată. Găsește cele mai evidente caracteristici care disting o clasă de alta. Aici, caracteristica a fost că toate mașinile marca A erau orientate spre stânga și toate mașinile marca B sunt orientate spre dreapta.

Rețeaua dvs. neuronală este la fel de bună ca datele pe care le alimentați.

Cum prevenim acest lucru? Trebuie să reducem cantitatea de funcții irelevante din setul de date. Pentru clasificatorul nostru de modele de mașini de mai sus, o soluție simplă ar fi adăugarea de imagini cu mașinile din ambele clase, orientate spre cealaltă direcție în setul de date original. Mai bine, puteți întoarce doar imaginile din setul de date existente pe orizontală, astfel încât acestea să se confrunte cu cealaltă parte! Acum, la antrenarea rețelei neuronale pe acest nou set de date, obțineți performanțele pe care intenționați să le obțineți.

Prin efectuarea augmentării, puteți împiedica rețeaua dvs. neuronală să învețe tiparele irelevante, stimulând în esență performanța generală.

Noțiuni de bază

Înainte de a ne afunda în diferitele tehnici de creștere, există o problemă pe care trebuie să o luăm în considerare în prealabil.

Unde adăugăm datele din conducta noastră ML?

Răspunsul poate părea destul de evident; facem o mărire înainte de a alimenta datele la model, nu? Da, dar ai două opțiuni aici. O opțiune este să efectuați în prealabil toate transformările necesare, crescând esențial dimensiunea setului de date. Cealaltă opțiune este să efectuați aceste transformări pe un mini-lot, chiar înainte de a-l alimenta modelului dvs. de învățare mașină.

Prima opțiune este cunoscută sub numele de augmentare offline. Această metodă este preferată pentru seturi de date relativ mai mici, deoarece veți ajunge să creșteți dimensiunea setului de date cu un factor egal cu numărul de transformări pe care le efectuați (De exemplu, prin răsturnarea tuturor imaginilor mele, aș crește dimensiunea setului meu de date cu un factor de 2).

A doua opțiune este cunoscută sub numele de augmentare online, sau mărire din zbor. Această metodă este preferată pentru seturi de date mai mari, deoarece nu vă puteți permite creșterea explozivă a dimensiunii. În schimb, ai efectua transformări pe mini-loturile pe care le-ai alimenta modelului tău. Unele cadre de învățare automată au suport pentru creșterea online, care poate fi accelerată pe GPU.

Tehnici populare de mărire

În această secțiune, vă prezentăm câteva tehnici de creștere de bază, dar puternice, care sunt utilizate în mod popular. Înainte de a explora aceste tehnici, pentru simplitate, să facem o presupunere. Presupunerea este că nu trebuie să luăm în considerare ceea ce se află dincolo de limita imaginii. Vom folosi tehnicile de mai jos astfel încât presupunerea noastră să fie valabilă.

Ce s-ar întâmpla dacă folosim o tehnică care ne obligă să ghicim ce se află dincolo de granița unei imagini? În acest caz, trebuie să interpolăm unele informații. Vom discuta acest lucru în detaliu după ce vom acoperi tipurile de mărire.

Pentru fiecare dintre aceste tehnici, de asemenea, specificăm factorul prin care dimensiunea setului de date va crește (de asemenea, factorul de augmentare a datelor).

1. Flip

Puteți răsfoi imagini orizontal și vertical. Unele cadre nu oferă funcție pentru raclele verticale. Dar, un flip vertical este echivalent cu rotirea unei imagini cu 180 de grade și apoi executarea unui flip orizontal. Mai jos sunt exemple pentru imaginile care sunt revazute.

Din stânga, avem imaginea originală, urmată de imaginea revărsată pe orizontală, apoi imaginea revărsată vertical.

Puteți efectua flipsuri folosind oricare dintre următoarele comenzi, de la pachetele preferate. Factor de mărire a datelor = 2 până la 4x

# NumPy.'img '= O singură imagine.
flip_1 = np.fliplr (img)
# TensorFlow. 'x' = Un loc de rezervă pentru o imagine.
forma = [inaltime, latime, canale]
x = tf.placeholder (dtype = tf.float32, forma = formă)
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. Rotire

Un lucru cheie de remarcat cu privire la această operație este că dimensiunile imaginii pot să nu fie păstrate după rotire. Dacă imaginea dvs. este un pătrat, rotirea acesteia în unghi drept va păstra dimensiunea imaginii. Dacă este un dreptunghi, rotirea acestuia cu 180 de grade ar păstra dimensiunea. Rotirea imaginii cu unghiuri mai fine va schimba și dimensiunea finală a imaginii. Vom vedea cum putem rezolva această problemă în următoarea secțiune. Mai jos sunt exemple de imagini pătrate rotite în unghi drept.

Imaginile sunt rotite cu 90 de grade în sensul acelor de ceasornic față de cea anterioară, pe măsură ce trecem de la stânga la dreapta.

Puteți efectua rotații folosind oricare dintre următoarele comenzi, de pe pachetele preferate. Factor de mărire a datelor = 2 până la 4x

# Placeholders: 'x' = O singură imagine, 'y' = Un lot de imagini
# 'k' indică numărul de rotații de 90 de grade în sensul acelor de ceasornic
forma = [inaltime, latime, canale]
x = tf.placeholder (dtype = tf.float32, forma = formă)
rot_90 = tf.image.rot90 (img, k = 1)
rot_180 = tf.image.rot90 (img, k = 2)
# Pentru a roti în orice unghi. În exemplul de mai jos, „unghiurile” se află în radieni
forma = [lot, înălțime, lățime, 3]
y = tf.placeholder (dtype = tf.float32, forma = formă)
rot_tf_180 = tf.contrib.image.rotate (y, unghiuri = 3.1415)
# Scikit-Image. 'unghi' = grade. 'img' = Imagine de intrare
# Pentru detalii despre „modul”, consultați secțiunea de interpolare de mai jos.
rot = skimage.transform.rotate (img, unghi = 45, mod = 'reflect')

3. Scara

Imaginea poate fi scalată spre exterior sau spre interior. În timp ce scalează în exterior, dimensiunea finală a imaginii va fi mai mare decât dimensiunea imaginii originale. Majoritatea cadrelor de imagine decupează o secțiune din noua imagine, cu o dimensiune egală cu imaginea originală. Ne vom ocupa de scalarea în interior în următoarea secțiune, deoarece reduce dimensiunea imaginii, forțându-ne să facem presupuneri despre ceea ce se află dincolo de graniță. Mai jos sunt exemple sau imagini care sunt scalate.

Din stânga, avem imaginea originală, imaginea scalată spre exterior cu 10%, iar imaginea scalată spre exterior cu 20%

Puteți efectua scalarea folosind următoarele comenzi, folosind scikit-image. Factor de augmentare a datelor = arbitraj

# Scikit Image. 'img' = Imagine de intrare, 'scale' = Factor de scară
# Pentru detalii despre „modul”, consultați secțiunea de interpolare de mai jos.
scale_out = skimage.transform.rescale (img, scale = 2.0, mode = 'constant')
scale_in = skimage.transform.rescale (img, scale = 0,5, mode = 'constant')
# Nu uitați să decupați imaginile la dimensiunea inițială (pt
# scale_out)

4. Cultură

Spre deosebire de scalare, doar probăm la întâmplare o secțiune din imaginea originală. Redimensionăm apoi această secțiune la dimensiunea originală a imaginii. Această metodă este cunoscută popular sub denumirea de tunsuri aleatorii. Mai jos sunt exemple de tunsori aleatorii. Dacă priviți cu atenție, puteți observa diferența dintre această metodă și scalare.

Din stânga, avem imaginea originală, o secțiune pătrată decupată din stânga sus și apoi o secțiune pătrată decupată din partea inferioară dreapta. Secțiunile decupate au fost redimensionate la dimensiunea imaginii originale.

Puteți efectua culturi aleatorii folosind oricare dintre următoarele comenzi pentru TensorFlow. Factor de augmentare a datelor = arbitraj

# TensorFlow. 'x' = Un loc de rezervă pentru o imagine.
original_size = [înălțime, lățime, canale]
x = tf.placeholder (dtype = tf.float32, forma = original_size)
# Utilizați următoarele comenzi pentru a efectua culturi aleatorii
crop_size = [new_height, new_width, channel]
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. Traducere

Traducerea presupune doar mutarea imaginii de-a lungul direcției X sau Y (sau ambele). În exemplul următor, presupunem că imaginea are un fundal negru dincolo de granița sa și sunt traduse în mod corespunzător. Această metodă de mărire este foarte utilă, deoarece majoritatea obiectelor pot fi localizate aproape oriunde în imagine. Acest lucru forțează rețeaua dvs. neuronală convolutivă să privească peste tot.

Din stânga, avem imaginea originală, imaginea tradusă spre dreapta și imaginea tradusă în sus.

Puteți efectua traduceri în TensorFlow folosind următoarele comenzi. Factor de augmentare a datelor = arbitraj

# pad_left, pad_right, pad_top, pad_bottom denotă pixelul
# deplasare. Setați una dintre ele la valoarea dorită și odihniți-vă la 0
forma = [lot, înălțime, lățime, canale]
x = tf.placeholder (dtype = tf.float32, forma = formă)
# Folosim două funcții pentru a obține creșterea dorită
x = tf.image.pad_to_bounding_box (x, pad_top, pad_left, înălțime + pad_bottom + pad_top, lățime + pad_right + pad_left)
output = tf.image.crop_to_bounding_box (x, pad_bottom, pad_right, înălțime, lățime)

6. Zgomot gaussian

Încadrarea excesivă se întâmplă de obicei atunci când rețeaua dvs. neuronală încearcă să învețe caracteristici de înaltă frecvență (tipare care apar foarte multe) care poate nu sunt utile. Zgomotul gaussian, care are o medie zero, are în esență puncte de date în toate frecvențele, distorsionând efectiv caracteristicile de înaltă frecvență. Acest lucru înseamnă, de asemenea, că componentele cu frecvență mai mică (de obicei, datele dorite) sunt, de asemenea, distorsionate, dar rețeaua dvs. neurală poate învăța să privească în trecut. Adăugând doar cantitatea potrivită de zgomot poate spori capacitatea de învățare.

O versiune tonificată în jos este zgomotul de sare și piper, care se prezintă ca pixeli aleatori alb-negru răspândiți prin imagine. Acest lucru este similar cu efectul produs prin adăugarea zgomotului gaussian la o imagine, dar poate avea un nivel mai scăzut de distorsionare a informațiilor.

Din stânga, avem imaginea originală, imagine cu zgomot gaussian adăugat, imagine cu adaos de sare și zgomot de piper

Puteți adăuga zgomot gaussian la imaginea dvs. folosind următoarea comandă, pe TensorFlow. Factor de mărire a datelor = 2x.

#TensorFlow. 'x' = Un loc de rezervă pentru o imagine.
forma = [inaltime, latime, canale]
x = tf.placeholder (dtype = tf.float32, forma = formă)
# Adăugarea zgomotului gaussian
zgomot = tf.random_normal (forma = tf.shape (x), medie = 0,0, stddev = 1,0,
dtype = tf.float32)
ieșire = tf.add (x, zgomot)

Tehnici avansate de mărire

Lumea reală, datele naturale pot exista în continuare într-o varietate de condiții care nu pot fi luate în considerare prin metodele simple de mai sus. De exemplu, să ne asumăm sarcina de a identifica peisajul în fotografie. Peisajul ar putea fi orice: tundre înghețată, pajiști, păduri și așa mai departe. Pare o sarcină de clasificare destul de simplă, nu? Ai avea dreptate, cu excepția unui lucru. Trecem cu vederea o caracteristică crucială în fotografiile care ar afecta performanța - Sezonul în care a fost realizată fotografia.

Dacă rețeaua noastră neuronală nu înțelege faptul că anumite peisaje pot exista într-o varietate de condiții (zăpadă, umezeală, strălucitoare etc.), aceasta poate eticheta spurios lacurile înghețate ca ghețari sau câmpuri umede ca mlaștini.

O modalitate de a atenua această situație este să adăugați mai multe imagini, astfel încât să luăm în calcul toate schimbările sezoniere. Dar aceasta este o sarcină dificilă. Extinzându-ne conceptul de creștere a datelor, imaginați-vă cât de fain ar fi să generați efecte, cum ar fi diferite anotimpuri în mod artificial?

GAN-uri condiționate la salvare!

Fără a intra în detalii deosebite, GAN-urile condiționate pot transforma o imagine de la un domeniu la o imagine în alt domeniu. Dacă credeți că sună prea vag, nu este; aceasta este literalmente cât de puternică este această rețea neuronală! Mai jos este un exemplu de GAN-uri condiționate utilizate pentru a transforma fotografiile peisajelor de vară în peisaje de iarnă.

Schimbarea anotimpurilor folosind un CycleGAN (Sursa: https://junyanz.github.io/CycleGAN/)

Metoda de mai sus este robustă, dar intensiv din punct de vedere computerizat. O alternativă mai ieftină ar fi ceva numit transfer de stil neural. Acesta prinde textura / ambianța / aspectul unei imagini (aka, „stilul”) și o amestecă cu conținutul alteia. Folosind această tehnică puternică, producem un efect similar cu cel al GAN-ului nostru condițional (De fapt, această metodă a fost introdusă înainte de inventarea cGAN-urilor!).

Singurul dezavantaj al acestei metode este că, rezultatul tinde să pară mai mult artistic decât realist. Cu toate acestea, există anumite progrese, cum ar fi Deep Photo Style Transfer, prezentate mai jos, care au rezultate impresionante.

Transfer de stil de fotografie profundă. Observați cum am putea genera efectul dorit de setul nostru de date. (Sursa: https://arxiv.org/abs/1703.07511)

Nu am explorat aceste tehnici în profunzime, deoarece nu suntem preocupați de funcționarea lor interioară. Putem folosi modele instruite existente, împreună cu magia învățării transferurilor, pentru a-l folosi pentru augmentare.

O scurtă notă despre interpolare

Dacă doriți să traduceți o imagine care nu are fundal negru? Ce se întâmplă dacă vrei să faci o scară spre interior? Sau rotiți în unghiuri mai fine? După ce efectuăm aceste transformări, trebuie să ne păstrăm dimensiunea originală a imaginii. Întrucât imaginea noastră nu are nicio informație despre lucrurile din afara acesteia, trebuie să facem niște presupuneri. De obicei, spațiul dincolo de limita imaginii este presupus a fi 0 constantă în fiecare moment. Prin urmare, atunci când efectuați aceste transformări, obțineți o regiune neagră în care imaginea nu este definită.

Din stânga, o imagine rotită cu 45 de grade în sensul acelor de ceasornic, o imagine tradusă spre dreapta și o imagine scalată spre interior.

Dar aceasta este presupunerea corectă? În scenariul real, este mai ales un nr. Procesarea imaginilor și cadrele ML au câteva moduri standard cu care puteți decide cum să completați spațiul necunoscut. Acestea sunt definite după cum urmează.

Din stânga, avem modurile constante, de margine, de reflectare, simetrice și de înfășurare.

1. constant

Cea mai simplă metodă de interpolare este de a umple regiunea necunoscută cu o anumită valoare constantă. Este posibil să nu funcționeze pentru imagini naturale, dar poate funcționa pentru imaginile luate pe fundal monocromatic

2. marginea

Valorile de margine ale imaginii sunt extinse după graniță. Această metodă poate funcționa pentru traduceri ușoare.

3. reflecta

Valorile pixelilor imaginii sunt reflectate de-a lungul graniței imaginii. Această metodă este utilă pentru fundaluri continue sau naturale care conțin copaci, munți etc.

4. simetric

Această metodă este similară reflectării, cu excepția faptului că, la limita reflectării, se face o copie a pixelilor de margine. În mod normal, reflectarea și simetria pot fi utilizate în mod interschimbabil, dar diferențele vor fi vizibile în timp ce se vor trata cu imagini sau modele foarte mici.

5. Înfășurați

Imaginea este repetată doar dincolo de granița sa, ca și cum ar fi gresie. Această metodă nu este folosită în mod popular ca restul, deoarece nu are sens pentru o mulțime de scenarii.

Pe lângă acestea, vă puteți proiecta propriile metode pentru a face față spațiului nedefinit, dar, de obicei, aceste metode ar fi bine pentru majoritatea problemelor de clasificare.

Deci, dacă aș folosi TOATE aceste tehnici, algoritmul meu ML ar fi robust nu?

Dacă îl utilizați în modul corect, atunci da! Care este modul corect în care întrebi? Ei bine, uneori nu toate tehnicile de mărire au sens pentru un set de date. Luați în considerare exemplul nostru de mașină. Mai jos sunt câteva dintre modalitățile prin care puteți modifica imaginea.

Prima imagine (din stânga) este originală, a doua este rotită orizontal, a treia este rotită cu 180 de grade, iar ultima este rotită cu 90 de grade (în sensul acelor de ceasornic).

Sigur, sunt imagini cu aceeași mașină, dar este posibil ca aplicația dvs. țintă să nu vadă niciodată mașini prezentate în aceste orientări.

De exemplu, dacă veți clasifica doar mașinile aleatorii pe drum, doar a doua imagine ar avea sens să se afle în setul de date. Dar, dacă dețineți o companie de asigurări care se ocupă de accidente auto și doriți să identificați și modele de mașini cu capul în jos, rupte, a treia imagine are sens. Este posibil ca ultima imagine să nu aibă sens atât pentru scenariile de mai sus.

Ideea este că, în timp ce folosim tehnici de augmentare, trebuie să ne asigurăm să nu creștem date irelevante.

Chiar merită efortul?

Probabil că așteptați câteva rezultate care să vă motiveze să parcurgeți kilometrul suplimentar. Destul de corect; Și eu am acoperit asta. Permiteți-mi să demonstrez că mărirea funcționează cu adevărat, folosind un exemplu de jucărie. Puteți reproduce acest experiment pentru a verifica.

Să creăm două rețele neuronale pentru a clasifica datele într-una dintre cele patru clase: pisică, leu, tigru sau un leopard. Captura este că una nu va folosi mărirea datelor, în timp ce cealaltă va. Puteți descărca setul de date de aici.

Dacă ați verificat setul de date, veți observa că există doar 50 de imagini pe clasă atât pentru antrenament, cât și pentru testare. În mod clar, nu putem folosi mărirea pentru unul dintre clasificatori. Pentru ca șansele să fie mai corecte, folosim Transfer Learning pentru a oferi modelelor o șansă mai bună cu cantitatea redusă de date.

Cele patru clase din setul nostru de date.

Pentru cel fără majorare, să folosim o rețea VGG19. Am scris aici o implementare TensorFlow, care se bazează pe această implementare. După ce ați clonat repo-ul meu, puteți obține setul de date de aici și vgg19.npy (folosit pentru învățarea transferurilor) de aici. Acum puteți rula modelul pentru a verifica performanța.

Aș fi de acord, însă, scrierea unui cod suplimentar pentru creșterea de date este într-adevăr un efort. Așadar, pentru a construi al doilea model, am apelat la Nanonets. Utilizează intern învățarea transferului și creșterea datelor pentru a oferi cele mai bune rezultate folosind date minime. Tot ce trebuie să faceți este să încărcați datele pe site-ul lor și să așteptați până când acestea sunt instruite pe serverele lor (de obicei în jur de 30 de minute). Ce știi, este perfect pentru experimentul nostru de comparație.

După ce a fost pregătit, puteți solicita apeluri la API-ul lor pentru a calcula exactitatea testului. Verificați repoziția mea pentru un fragment de cod de exemplu (nu uitați să introduceți ID-ul modelului dvs. în fragmentul de cod).

Rezultate
VGG19 (Fără majorare) - Precizie de testare de 76% (cea mai mare)
Nanonete (cu mărire) - precizie de testare de 94,5%

Nu este impresionant. Cert este că majoritatea modelelor funcționează bine cu mai multe date. Așadar, pentru a oferi o dovadă concretă, am menționat tabelul de mai jos. Prezintă rata de eroare a rețelelor neuronale populare pe seturile de date Cifar 10 (C10) și Cifar 100 (C100). Coloanele C10 + și C100 + sunt ratele de eroare cu mărirea datelor.

Ratele de eroare ale rețelelor neuronale populare pe seturile de date Cifar 10 și Cifar 100. (Sursa: DenseNet)

Vă mulțumim că ați citit acest articol! Apăsați butonul de aplauzare dacă ați făcut-o! Sper să arunce ceva cu privire la marirea datelor. Dacă aveți întrebări, puteți să mă accesați pe rețelele de socializare sau să-mi trimiteți un e-mail (bharathrajn98@gmail.com).

Despre Nanonets: Nanonets creează API-uri pentru a simplifica învățarea profundă pentru dezvoltatori. Vizitați-ne la https://www.nanonets.com pentru mai multe)