◈ CNN – Konvolúciós hálózat – Számjegyfelismerés

CNN Tanoda Django · PyTorch · MNIST Fejlesztési segítség: OpenAI Astra Felismerő modell: DigitCNN · helyben tanított
Mi a konvolúciós hálózat?
A CNN kis szűrőket (kerneleket) csúsztat végig a képen — 3×3 pixeles ablakokat. Minden pozícióban ugyanazokat a súlyokat használja → sokkal kevesebb paraméter, és ugyanazt a mintát több helyen is keresheti. Az előfeldolgozott képen látható a 3×3-as kernel csúszása.

Mit tanul a modell?
A kézzel rajzolt számjegyeket (0–9) különbözteti meg, és a firkákat is külön osztályba sorolja. Egyszerre egy számjegyet vár. 55 000 számjegyből és 10 000 generált firkából tanult. A szerver kivágja, méretezi és középre igazítja a rajzot.
Mely rétegeken zajlik a tanítás?
A két Conv2D és a két Dense réteg tanul. Az első réteg 8 darab 3×3-as szűrője látható lent; a második 24 szűrővel dolgozik. A MaxPool és Flatten rétegnek nincs tanítható súlya.

Összesen: – tanítható paraméter.
A kimenet 11 osztály: 0–9 és firka. A hibafüggvény többosztályos keresztentrópia. A modellpontszám nem garantált helyességi valószínűség.
  1. Tanítás: korábban külön lefuttattuk a szerveren. A modell megtanulta, hogy a konvolúciós szűrők milyen mintázatokra reagáljanak, és a Dense rétegek hogyan használják fel ezeket a számjegyek felismeréséhez. Ehhez a szűrők és a Dense rétegek súlyait módosította, majd elmentettük őket. A keresett mintázatokat nem mi adtuk meg előre: azok a tanítópéldák alapján alakultak ki. A tanítás 12 epochig tartott: egy epoch a teljes tanítóadathalmazon való egyszeri végighaladást jelenti.
  2. Az oldal használata: a szerver a mentett súlyokkal értékeli ki a rajzot. Ilyenkor nem tanul, csak felismerést végez.
  3. Visszajátszás: nyolc mentett állapotot mutat be: a tanítás előtti 0. állapotot, majd a 2., 3., 5., 7., 9., 10. és 12. epoch végén elmentett súlyokat. Nem új tanítást indít.
Rajzolj egy számjegyet
Vonal: 6
Döntés
–
Kernel animáció a hálózat bemenetén
Seb:
–
–
Valódi tanítás mentett állapotai. A felismerés a kiválasztott állapotot használja.
Betöltés...
Tanítóképek
0 / 0
Első konvolúció + ReLU · Kernel súlyok (3×3)
■ pos  ■ neg
Feature map-ek (kattints a képekre!)
–
MaxPooling kimenet (kattints!)
13×13
Második konvolúció + ReLU · 24 × 11 × 11
Szűrő #0 · 11×11
Második MaxPool · 5×5
Kattints egy képpontra
–
Előbb értékeld ki a rajzot.
Részletek
Aktiváció, nem egyezési százalék. Sárga: 10×10-es terület az előfeldolgozott bemeneten; a nagy rajzon ennek közelítő visszavetítése.

Egy konvolúciós lépés nagyítója

1. Képrészlet · 3×3
2. Kernel súlyai · 3×3
3. Azonos helyű értékek szorzatai
Szorzatok összege:
A sárga keret az ebből létrejövő képpontot jelöli.

A bemeneti érték 0-nál fekete, 1-nél fehér. A súlyoknál és a szorzatoknál zöld a pozitív, piros a negatív érték. A számok kerekítve jelennek meg, a számítás nem a kerekített értékekkel történik.

Amikor két részlet együtt számít

Szemléltető példa, nem a valódi modell számítása. Képzeljük el, hogy két bemeneti jelünk van: egy hurok fent, egy hurok lent. Jelenlétük 1, hiányuk 0.

Csak fent
Válasz: 0
Csak lent
Válasz: 0
Együtt
Válasz: 0,5

Egy jel önmagában kevés. A két jel együtt már pozitív választ ad.

Részletek

Mindkét jel súlya +1, a bias −1,5. Egy jel mellett az összeg negatív, ezért a ReLU nullát ad. Két jel együtt már pozitív összeget eredményez.

A valódi Dense rétegben minden neuron mind a 600 bemenetet saját, tanult súlyokkal mérlegeli. A bemenetek sorrendje megőrzi a szűrőt és a helyet. Itt a súlyokat mi választottuk; nem állítjuk, hogy a valódi modell külön hurokfelismerő neuronokat használ. A 0,5 nem 50%-os bizonyosság.

Ezt a képet látja a hálózat

A hálózat a rajzod lekicsinyített, középre igazított változatát kapja. Ez még a bemenet, nem a felismerés eredménye.

Például egy nagyra rajzolt 8-asból is egy kis, 28×28 pixeles kép készül.
Részletek

A program körbevágja a rajzot, arányosan lekicsinyíti és középre igazítja. A sárga 10×10-es kijelölés ezen a 28×28-as képen értendő pontosan; a nagy rajzon közelítő visszavetítés látható.