⚙️ Zdrojové kódy a projekty z predmetu Kontrolling na DNN (Deep Neural Network) na PEVS/PANI
Na vstupe (vstupnej vrstve) máme RGB obrázky o veľkosti 128 x 128 px, 3 kanály. Veľkosť trénovacích vzoriek je 1098 a počet validačných vzoriek je 277. Rozdelenie je teda 80 % trénovacie vzorky a 20 % validačné t.j. paretovo pravidlo 80/20.
Celkový počet vzoriek: | 1370 | 100% |
---|---|---|
Počet trénovacích vzoriek: | 1098 | 80% |
Počet validačných vzoriek: | 272 | 20% |
{
# Nazov experimentu
"name": "exp_000",
# Počet konvolučných blokov
"conv_num": 2,
# V rámci konvolučných vrstviev, používame rôzne typy filtrov
"filter_num": 32,
# Rôzne velkosti filtrov
"filter_size": (3, 3),
# Veľkosť max_poolingu, aby sme redukovali výsledné matematické operácie, ktoré prebehli cez konvolúcie
# a potom výsledné matice, akým spôsobom sa zgrupovali a zmenšovali, aby sa neuronová sieť rýchlejšie natrénovala
# a lepšie rozpoznávala jednotlivé oblasti
"max_pooling": (2, 2),
# Regularizačná technika, pri prepojených/plne prepojených vrstvách bude náhodne dávať váhu
# jednotlivých prepojení na 0, čiže ako keby ich vypol
# Regularizačný prvok, vďaka týmto výpadkom je neuronová sieť vyslovene nútená hladať prepojenia vo vzoroch
# Môže tam byť nejaký šum
# 0.2 znamená, že 20 % prepojení nám náhodne vypadne, dropoutom sa vynulujú tie prepojenie, nevymažú sa vyslovene
"dropout": 0.2,
# Optimalizátor, najzákladnejší
"optimizer": "adam",
# Veľkosť dávky, v ktorom neuronová sieť bude jednotlivé informácie vyhodnocovať
# na koľko obrázkov sa naraz pozrie než sa aktualizuje
"batch_size": 16,
# Ak je True využite sa funkcia maxpooling, ak je False využije sa averagepooling
"is_max_pooling": True,
}
python
# Rozdiel medzi exp_000, exp_001 a exp_002:
# - Rôzne velkosti filtrov (filter_size) 3,3 a 5,5
# - Rôzne is_max_pooling exp_000 použije maxpooling exp_001 použije averagepooling
{
"name": "exp_001",
"conv_num": 2,
"filter_num": 32,
"filter_size": (5, 5),
"max_pooling": (2, 2),
"dropout": 0.2,
"optimizer": "adam",
"batch_size": 16,
"is_max_pooling": False,
},
{
"name": "exp_002",
"conv_num": 2,
"filter_num": 32,
"filter_size": (3, 3),
"max_pooling": (2, 2),
"dropout": 0.2,
"optimizer": "adam",
"batch_size": 16,
"is_max_pooling": False,
}
{
"name": "exp_000",
"conv_num": 2,
"filter_num": 32,
"filter_size": (3, 3),
"max_pooling": (2, 2),
"dropout": 0.5,
"optimizer": "adam",
"batch_size": 32,
"is_max_pooling": False,
},
{
"name": "exp_001",
"conv_num": 2,
"filter_num": 32,
"filter_size": (5, 5),
"max_pooling": (2, 2),
"dropout": 0.3,
"optimizer": "adam",
"batch_size": 32,
"is_max_pooling": False,
},
{
"name": "exp_002",
"conv_num": 2,
"filter_num": 32,
"filter_size": (3, 3),
"max_pooling": (2, 2),
"dropout": 0.2,
"optimizer": "adam",
"batch_size": 32,
"is_max_pooling": False,
}
Port si môžeme zvoliť, ale aj nemusíme a Tensorborad vyberie voľný/dostupný port.
Nezabudnúť si nastaviť premenné prostredia (environy| pre cesty/path
- C:\ProgramData\Anaconda3\Library\bin\conda.bat
- C:\ProgramData\Anaconda3\Scripts\conda.exe
- C:\ProgramData\Anaconda3\condabin\conda.bat
Test v príkazovom riadku:
where conda
# V príkazovom riadku CMD Anaconda (Anaconda Prompt (Anaconda3))
cd C:\Users\miros\PycharmProjects\DNN2_2_Definicia_Datasetu
# Najprv treba aktivovať virtuálne prostredie
conda activate Kontrolling
conda activate DNN2_2_Definicia_Datasetu
tensorboard --logdir=C:\Users\miros\PycharmProjects\DNN2_2_Definicia_Datasetu\logs --host=127.0.0.1
tensorboard --logdir=C:\Users\miros\PycharmProjects\Kontrolling\logs --host=127.0.0.1
TensorBoard potom beží na URL: http://127.0.0.1:6006/
TIP: Kopírovanie path/cesty priamo z PyCharm v okne Project (Pravé tlačidlo myši) a Copy Path/Reference -> Absolute Path
- Problém s najnovšou verziou PyCharm 2022.3 s Jetbrains ToolBox (aj Community aj Professional edícia) s portami pri nainštalovaní Hyper-V, Docker
Riešenie:
winnat a nepoužívať Jetbrains Toolbox
net stop winnat
net start winnat
- Problém s nezobrazovaním balíkov v Python Interpreteri, prázdne okno dostupné balíčky (Available Packages)
- Problém s verziu Pythonu v interpreteri
Riešenie:
Treba použiť v Interpreteri pre Conda Python 3.8 t.j. downgrade verzie z 3.9 až 3.10.
- Problém s duplicitou knižnic https://stackoverflow.com/questions/20554074/sklearn-omp-error-15-initializing-libiomp5md-dll-but-found-mk2iomp5md-dll-a
# OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5 already initialized.
# OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program.
# That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.
Riešenie:
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
alebo vymazať libiomp5md.dll
- Problém s vygenerovaním dát pre 1. epochu (Invalid Argument Error / Graph Execution Error) https://stackoverflow.com/questions/71153492/invalid-argument-error-graph-execution-error
Riešenie:
Dense pri vrstvách z Kerasu nastaviť na rovnaký počet ako má byť priečinkov/tried. Pri psoch a mačkach boli logicky 2, pri 10 druhov opíc na 10.
- Problém s nesprávnou veľkosťou validačnej zložky miesto 272 bola 2720...
Riešenie:
Jednoduchá kontrola či máme pomer 80/20 alebo 70/30 (Trenovácie/Validačné) alebo (Trenovácie/Validačné+Testovacie)