Umelá inteligencia - prvé kroky k programovaniu
V minulom zápisku som písal o umelej inteligencií v rozpoznávaní obrazu.
V tomto blogu si konečne užijete malé začiatky programovania, ako to vyzerá a pripravíme si prostredie pre prácu.
Budeme sa baviť o Keras. Čo je vysokoúrovňové API nad knižnicami TensorFlow, CNTK, alebo theano.Prečo Keras? Je vysokoúrovňový, takže riešime len úlohu a nemusíme sa starať o nejaké nízkoúrovňové problémy, ale pokiaľ by sme na ne chceli siahnuť, tak nám tu tá možnosť stále ostáva.
Keď si zoberieme príklad z prvého blogu.
Tak počítačový model bude vyzerať takto jednoducho:
# Zadefinujeme si sekvenčný model model = Sequential () # Pridáme si vrstvu "Dense", ktorá má tri neuróny a dva vstupy. model.add (Dense (3, input_dim=2)) # Pridáme si ďalšiu vrstvu, čo je vlastne výstup s jedným neurónom. model.add (Dense (1))A teraz poskočíme na zložitejší model z druhého blogu, ale kód bude stále dobre čitateľný a v tom je krása Kerasu.
Ten model nie je úplne kompletne popísaný, tak si tie údaje doplníme ako to býva zvykom. Vstup bude nejak rozumne veľký. Teda aby nebol moc veľký a zas dostatočný na rozpoznanie objektu, ja som zvolil 50x50 pixelov, vidíte, že črty je stále možné rozpoznať.
Väčšinu kódu tvoria komentáre.
input_shape = 50, 50 num_classes = 2 # Zadefinujeme si sekvenčný model model = Sequential () # Pridáme si prvú konvolučnú vrstvu s 32 kernelmi (filtrami). # Kernel má veľkosť 3x3. # So skokom (stride) o jeden pixel. # S aktivačnou funkciou 'relu'. # Vstup je uložený v premennej 'input_shape'. model.add (Conv2D (32, kernel_size = (3, 3), strides = (1, 1), activation = 'relu', input_shape = input_shape)) # Sploštenie dát som spomínal už v minulom blogu. # Takto sa to píše v Keras. model.add (MaxPooling2D (pool_size = (2, 2))) # Pridáme si ďalšiu konvolučnú vrstvu. # Ak nezadáme všetky nastavenia, tak sa použijú štandartné hodnoty model.add (Conv2D (64, kernel_size = (3, 3), activation='relu')) # Pridáme ešte jedno sploštenie dát. model.add (MaxPooling2D (pool_size=(2, 2))) # Teraz dáta sploštíme na 1 x 1 a roztiahneme na dĺžku. model.add (Flatten ()) # Tu máme plne prepojenú vrstvu s 512 neurónmi. model.add (Dense (512, activation = 'relu')) # No a na záver tu máme dva neórony. # Softmax rozhodne o tom či sa nám rozsvieti neurón 'mama', alebo 'nie mama' model.add (Dense (num_classes, activation='softmax'))A teraz si náš model zobrazíme.
model.summary()
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 48, 48, 32) 320 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 24, 24, 32) 0 _________________________________________________________________ conv2d_1 (Conv2D) (None, 22, 22, 64) 18496 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 11, 11, 64) 0 _________________________________________________________________ flatten (Flatten) (None, 7744) 0 _________________________________________________________________ dense (Dense) (None, 512) 3965440 _________________________________________________________________ dense_1 (Dense) (None, 2) 1026 ================================================================= Total params: 3,985,282 Trainable params: 3,985,282 Non-trainable params: 0 _________________________________________________________________Vidíme, že model má 3 985 282 parametrov. Toto je zatiaľ všetko, prejdeme na prípravu postredia, aby sme sa s ním mohli pohrať.
Predprogramátorské prípravy
Aby sme mohli začať, potrebujeme si nainštalovať TensorFlow a Keras. Najpohodlnejšie to bude nainštalovať cez pip.V Debian/Ubuntu si pip nainštalujeme príkazom
sudo apt install python3-pipV Arch Linuxe
sudo pacman -S python-pipVšetky možnosti inštalácie nájdete tu.
Teraz pip upgradneme. (Tu môže byť problém podľa distra. Tiež je potrebné si pozrieť --user a venv.)
python3 -m pip install --upgrade pipTeraz nainštalujeme TensorFlow a Keras
python3 -m pip install tensorflow kerasChvíľu to potrvá, keď je všetko nainštalované, zapneme si python konzolu
python3Vybehne na nás približne takýto výstup
Python 3.7.6 (default, Jan 19 2020, 22:34:52) [GCC 9.2.1 20200117] on linux Type "help", "copyright", "credits" or "license" for more information. >>>Zadáme tam
import tensorflowPokiaľ na nás nevybehne nejaká chybová hláška, tak sme za vodou a môžeme si pozrieť akú verziu sme nainštalovali
tensorflow.__version__U mňa to je '2.1.0'.
Ak to vyhodí nejaký fault, tak máte smolu a budete si musieť TensorFlow skompilovať, alebo použiť nejaké wheels pre svoju platformu, prípadne ak máte v sieti nejaký modernejší HW, tak ho spúšťať po sieti.
Doinštalujeme si ešte knižnice, čo sa nám na prácu s NN hodia a to Numpy a OpenCV.
python3 -m pip install numpy opencv-python
Slovník
Tu nájdete na jednom mieste veci s ktorými sme sa stretli a aj tie ktoré som preskočil.Backpropagation
Feedforward neural network
Neurónová sieť
Umelý neurón
Kernel (filter) = Slúži na extrahovanie vlastností z dát, prípadne len na splošťovanie dát.
Konvolučné neurónové siete = Vyťahujú z údajov vlastnosti.
Počet parametrov siete = Počet neurónov a prepojení.
Keras
Keras vrstvy
Základné vstvy
Konvolučné vrstvy
Aktivačné funkcie
Optimalizačné algoritmy
Loss funkcie
Metriky
Pre pridávanie komentárov sa musíte prihlásiť.