Pitanje:
Zašto moramo normalizirati slike prije nego što ih stavimo u CNN?
Zhi Lu
2015-12-09 12:54:07 UTC
view on stackexchange narkive permalink

Nije mi jasan razlog zašto sliku za CNN normaliziramo za (slika - srednja_slika)? Hvala!

Jedan odgovor:
lollercoaster
2015-12-09 13:24:15 UTC
view on stackexchange narkive permalink

Prva napomena: doista biste trebali dijeliti i sa standardnim odstupanjem vrijednosti svake značajke (piksela). Oduzimanjem srednje vrijednosti ulaz se centrira na 0 i dijeljenjem sa standardnim odstupanjem čini bilo koja skalirana vrijednost značajke brojem standardnih odstupanja od srednje vrijednosti.

Da odgovorimo na vaše pitanje: razmotrite kako neuronska mreža uči svoje težine. C (NN) uče kontinuiranim dodavanjem vektora gradijentnih pogrešaka (pomnoženih s brzinom učenja) izračunatih iz povratnog širenja u razne matrice težine u cijeloj mreži dok se prolaze primjeri treninga.

Ono što ovdje treba primijetiti je "pomnoženo sa stopom učenja".

Da ne skaliramo svoje vektore ulaznog treninga, rasponi naše raspodjele vrijednosti značajki vjerojatno bi se razlikovali za svaku značajku, pa bi stopa učenja uzrokovala korekcije u svakoj dimenziji koje bi se razlikovale (proporcionalno govoreći) jedni od drugih. Možda bismo prekomjerno nadoknadili korekciju u jednoj dimenziji težine, dok bismo u drugoj podkompenzirali.

Ovo nije idealno jer bismo se mogli naći u oscilirajućem stanju (nesposobni usredotočiti se na bolji maksimum u prostoru troškova (težine)) ili u usporenom kretanju (presporo putovanje da bismo došli do boljeg maxima) stanje.

Naravno da je moguće imati stopu učenja po težini, ali još je hiperparametara za uvođenje u već složenu mrežu koju bismo također morali optimizirati da bismo je pronašli. Stope učenja općenito su skalari.

Stoga pokušavamo normalizirati slike prije nego što ih upotrijebimo kao ulaz u NN (ili bilo koji gradijent) algoritam.

što je sa slikama u boji?da li to radim za svaki kanal u boji?ne bi li to pokvarilo raspodjelu boja?
Vjeruj da bi trebao.Možete samo učiniti nešto poput: `(image - image.mean ()) / (image.std () + 1e-8)`
Je li ovo stvarno korisno za trening?Treniram detektor predmeta, a pomoću ovih montirača slike su stvarno zbunjujuće, teško je vidjeti predmete koje detektiram
Prilično je korisno za trening u smislu naučivosti i točnosti - nije za vas, već za model :) Možda ćete htjeti prikazati nestandardnu sliku kad ispravljate pogreške tako da izgleda normalno za vaše ljudske oči.
Standardizacija je jedna vrsta skaliranja.Moramo skalirati kada su obilježja različitih razmjera, jedinica, raspona itd. Ali na slici svi stupci obilježja nisu ništa drugo doli intenziteti.Stoga su svi oni već skalirani u istom rasponu [0-255].Pa, što je potrebno za njihovo ponovno skaliranje?Ali još uvijek možemo misliti na pomicanje podataka i što je korisno u ovom slučaju.Mislim, oduzimanjem prosječnih vrijednosti R, G i B cijelog skupa podataka od svake odgovarajuće vrijednosti piksela kanala.I sam sam obučavao klasifikator i samo oduzimam srednje vrijednosti i koje su dobro funkcionirale.


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 3.0 licenci pod kojom se distribuira.
Loading...