Začíname s PyTorch

Ak chcete začať so strojovým učením, máte na výber hneď niekoľko knižníc. PyTorch je jednou z nich. Táto knižnica si získala popularitu najmä vďaka tomu, že podľa veľa ľudí je používateľsky jednoduchšia v porovnaní s knižnicou Tensorflow. Dnes sa pozrieme na základy knižnice PyTorch a vytvoríme vzorový projekt s konvolučnou neurónovou sieťou (CNN).

Prvým krokom je samozrejme inštalácia. Je potrebné si skontrolovať hardvér a v závislosti od toho stiahnuť danú verziu PyTorch. Výhodou je grafická karta, ktorá podporuje programovací model CUDA. S jeho použitím je možné zrýchliť výpočty využitím potenciálu grafickej karty.

Na stránke si vyskladáte verziu doslova ušitú na mieru vášmu systému. Môžete si vybrať programovací jazyk, operačný systém alebo verziu CUDA.

Pytorch konfiguracia

Zdroj: snímka obrazovky, PyTorch

Základom akejkoľvek knižnice pre strojové učenie je tensor. Ide o štruktúru podobnú matici, avšak tensor môže mať viac rozmerov.

V PyTorch je tensor definovaný ako objekt. Nasledujúci kód vytvorí tensor s veľkosťou 3×3 (3 stĺpce, 3 riadky) s hodnotami 1. Taktiež je možné vytvoriť tensor s náhodnými hodnotami. Pre zobrazenie hodnôt tensoru použijeme funkciu print().

import torch
a = torch.ones(3, 3)
print(a)

Zobrazenie tensoru pomocou funkcie print():

tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])

Matematické operácie ako sčítanie alebo násobenie tensorov sú v PyTorch veľmi jednoduché.  V príklade sčítame dva tensory obsahujúce jednotky a vypíšeme výsledok po sčítaní.

a = torch.ones(3,3)
b = torch.ones(3,3)
c = a + b
print(c)

Výsledok sčítania tensorov:

tensor([[2., 2., 2.],
[2., 2., 2.],
[2., 2., 2.]])

Vytvorenie CNN

Ak ste sa s pojmom konvolučná neurónová sieť ešte nestretli, odporúčame si najskôr prečítať článok. V PyTorch sú neurónové siete zadefinované ako triedy odvodené z torch.nn.Module. Najprv si zadefinujeme pomocou funkcie _init_() jednotlivé vrstvy neurónovej siete. Poradie vrstiev v tejto funkcii nie je dôležité. Vo funkcii forward() sa vrstvy „naskladajú“ na seba. Tu už na poradí záleží. K vrstvám sa určuje aj aktivačná funkcia(F.relu(x) ). Ďalej vytvoríme funkciu train() do ktorej vstupujú hyperparametre. Funkcia nám po zavolaní vykoná natrénovanie siete. Potom vytvoríme funkciu test() ktorej úlohou je otestovať presnosť nášho modelu.

Po zadefinovaní siete, trénovania a testovania si musíme pripraviť a načítať dataset. V tomto príklade je použitý dataset MNIST, ktorý pozostáva z obrázkov rukou písaných číslic od 0 po 9. Obrázky majú rozlíšenie 28×28 a sú vo formáte odtieňov sivej farby. Trénovacia časť MNIST sa skladá z 60 000 obrázkov a testovacia z 10 000 obrázkov. Dataset si viete stiahnuť priamo prostredníctvom knižnice.

V poslednej časti vytvoríme inštanciu triedy Net() s našou neurónovou sieťou a určíme optimalizačný algoritmus. Môžeme si aj vypísať architektúru siete pomocou funkcie print().

Výpis architektúry siete:

Net(
(conv1): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1))
(conv2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1))
(dropout1): Dropout2d(p=0.25, inplace=False)
(dropout2): Dropout2d(p=0.5, inplace=False)
(fc1): Linear(in_features=9216, out_features=128, bias=True)
(fc2): Linear(in_features=128, out_features=10, bias=True)
)

Po presunutí modelu na grafickú kartu pomocou funkcie .to() vytvoríme cyklus, v ktorom voláme funkcie test() a train(). Po vykonaní trénovania sa nám na konci vypíšu výsledky trénovania. V našom prípade má neurónová sieť presnosť 99% a priemernú chybovosť 0.03.

Test set: Average loss: 0.0337, Accuracy: 9907/10000 (99%)

Ako teda môžete vidieť, používanie knižnice PyTorch je ľahko zvládnuteľné a intuitívne. Vzorový príklad, kde si s jeho použitím vytvoríte CNN, nájdete na našom GitHub-e. Aj keď toto bola len jednoduchá ukážka, dokážete s ňou navrhnúť aj komplexné riešenia vyžadujúce algoritmy strojového učenia.

 

Zdroj:

https://towardsdatascience.com/an-easy-introduction-to-pytorch-for-neural-networks-3ea08516bff2

úvodný obrázok: WikiMedia Commons

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *