Napisz i wytrenuj generującą sieć neuronową dla zbioru danych MNIST.
Termin: 21 grudnia za 1,00 punkt
Termin: 4 stycznia za 0,50 punktu
Szczegółowa specyfikacja rozwiązania:
-
generator powinien rozpoczynać obliczenia od wektora szumów (losowany jednostajnie z pewnego przedziału lub z rozkładem normalnym; przetestuj jak lepiej)
-
wartości pikseli obrazków powinny być wartościami z tego samego przedziału; najlepiej [-1,1] (czyli normalizacja wejścia/wyjścia do przedziału łatwego w obsłudze przez model)
-
oba modele (generator i dyskryminator) powinny używać etykiet; polecane rozwiązanie to doklejenie 10 wymiarów etykiet do każdej warstwy dyskryminatora jak i generatora; dla przykładu generator może rozpocząć z wektora szumów [100], czyli na wejściu będziemy mieć wektor [110], gdzie ostatnie 10 wartości to 9 zer i 1 jedynka w miejscu odpowiającym cyfrze, którą chcielibyśmy aby generator wygenerował; idąc dalej powiedzmy, że pierwsze przejście w generatorze to warstwa fully-connected z wynikiem [128], zatem macierz przejścia ma wymiary [110,128]; do kolejnej warstwy znów doklejamy 10 wymiarów tak samo wypełnionych, a więc warstwa ma wymiar [128+10], itd.; można powiedzieć, że ostateczny obrazek (w CIFAR-10) ma wymiary [32,32,3+10]; dyskryminator dokleja te etykiety do swoich warstw w taki sam sposób, a zatem na wejściu przyjmuje obrazek [32,32,3+10];
-
jakość wygenerowanych obrazków ewaluujemy poprzez wynik klasyfikatora (z poprzednich projektów) trenowanego na wygenerowanym zbiorze wygenerowanym a testowanym na oryginalnym zbiorze.
Wymagany wynik klasyfikatora to co najmniej 90%.
-
oba modele powinny mieć standardowe warstwy sieci konwolucyjnych: normalizację batcha, nieliniową funkcję aktywacji;
- [dropout]
niektórzy próbują wręcz nienaturalne wielkości dropoutu w generatorze ...
- [label smoothing]
przetestować krzyżowanie dobrych danych z wektorami 0,9 zamiast 1 w funkcji kosztu dyskryminatora; niektórzy idą dalej patrz
ganhacks;
-
klasyczna funkcja kosztu generatora to log(1-D);
przetestuj log(D), który ponoć jest lepszy w praktyce
-
podczas generacji obrazków przez generator (dla treningu albo już 'do produkcji') generuj 'etykiety; w sposób losowy tak aby z grubsza liczba kopii każdej z 'etykiet' w batchu była taka sama; to jest ważne dla normalizacji batcha.
-
niektóre wspomniane jak i inne haki w ganhacks
-
prezentacja: pokaż wygenerowane obrazki dla ustalonego szumu i etykiety płynnie przechodzącej z jednej cyfry w drugą; próbki wygenerowanych obrazków w trakcie procesu trenowania.