====== Paper ======
====== AlexNet Skalieren ======
Was tun, falls AlexNet als Basis verwendet wird, aber weniger Kategorien verwendet werden? Beispiel Kategorien 1,000 auf 240
However, because the problem is of a much smaller magnitude than that of the
ImageNet Challenge , we scaled down the number of kernel mappings in all of
the convolutional layers to half
====== Caffe SM ======
Wir brauchen ja ggf. Zugriff auf die internen Netzparameter und da bietet sich das Python Interface an. Als Beispiel sei hier die Extraktion von fc8, also dem Softmax-Layer gegeben:
* mittels fprop_tee wird PICA_NET geladen.
* W,b = PICA_NET.net.params['fc8'], also Blobs extrahieren
* Die numpy-Daten liegen in W.data, b.data
* Obacht: ggf. ist der Shape etwas lustig, deshalb lieber nochmal manuell ''%%W = W.data.reshape1), b = b.data.reshape2)%%''
* W.shape, b.shape sollte jetzt normal aussehen
* dann nur noch pickeln pickle.dump([W,b], open('softmax.weights', 'w'))
====== koffeinhaltige Weisheiten ======
* während des Trainings wird ein Random Crop eines Bilds erzeugt. Dieser ist bei jeder forward-Phase eine andere. D.h. eine einfache Form der Augmentierung der Daten. Mit 'mirror' kann zusätzlich noch eine gespiegelte Variante für das Training genutzt werden.
====== ML 101 ======
Zauberkasten für kleine Machine Learner.
===== Theano =====
da GPUs nur float32 können und float64 aber per Default auf modernen CPUs ist, sollte folgende Einstellung in der .theanorc gesetzt werden
''%%[global] floatX = float32%%''
Gegebenenfalls ist es deshalb notwendig, gespeicherte Dateien zu “casten”, also beispielsweise:
''%% X = np.load('/some/path/data.npy').astype('float32')%%''
D.h., da die GPU die Genauigkeit vorgibt, wird an keiner Stelle mehr von float64 profitiert und sollte generell vermieden werden, da ja potenziell alles auf der GPU laufen kann. Weiterhin spart float32 erheblichen Platz bei Daten und Modellen.
==== Theano 0.7 ====
Enthält Millionen von Bugfixes und Support for cuDNN für die schnelle Faltung. Bei Tests mit mnist war der neue Code 50% schneller. Auf grapu ist cuDNN global installiert und wird von Theano automatisch verwendet. Soll dies nicht geschehen, bzw. explizit geschehen, kann man es wie folgt deaktivieren/aktivieren:
''%%THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32,optimizer_excluding=conv_dnn THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32,optimizer_including=cudnn%%''
Bei der neuen Version handelt es sich um RC2. Tests auf grapu laufen gerade. Bzgl. Stabilität war Theano bisher immer vorbildlich.
==== Zoo der Bibliotheken ====
* DeCAF: Vorläufer von Caffe. Liefert Modelle für AlexNet und ist mit 0.5s auf der CPU die beste Lösung falls keine GPU verwendet werden kann.
* Caffe: Bibliothek für DeepLearning und ConvNet. Extrem schnell auf der GPU, aber nicht flexibel, um beliebige Kostenfunktionen out-of-the-box zu trainieren. Beschreibt allerdings Modelle generisch mittels Protokolldateien, um den ForwardProp-Test zur Testzeit einfach zu gestalten.
* Theano: Erlaubt es einfach, math. Ausdrücke zu optimieren. Enthält sym. Differentiation und kann somit beliebige Kostenfunktionen optimieren. Arbeitspferd für alle unsere Modelle. Sehr Low-Level, aber mächtig.
* pylearn2: Aufsatz für Theano, um Aufgaben wie das Modelltraining zu vereinfachen. Ähnlich wie bei Caffe können ganze Modelle einfach als Protokolldatei spezifiert und trainiert werden.
===== Tanzen mit PIP =====
Ein lokales Paket upgraden, egal ob global das Paket installiert ist. Keine Abhängigkeiten und eine bestimmte Version:
$ pip install --user --upgrade --no-deps --ignore-installed Theano==0.7.0rc2
===== Wechsel der GPUs =====
Welche GPUs sind vorhanden?
$ nvidia-smi
Und dann die Theano-Flags entsprechend setzen:
$ export THEANO_FLAGS=mode=FAST_RUN,device=gpu0,floatX
$ export THEANO_FLAGS=mode=FAST_RUN,device=gpu1,floatX
===== Lustige Links =====
AlexNet in purem Theano https://github.com/uoguelph-mlrg/theano_alexnet
===== Neuer Nutzer mit CUDA =====
Der junge Mann muss auf jeden Fall in die Gruppe “video”, sonst läuft da gar nichts.
===== S.M.A.R.T =====
Prüfung ob eine Festplatte einen Knacks hat:
$ sudo smartctl -a /dev/sda #status ausgeben
Steht da **nicht** PASSED, droht Datenverlust. Aber die Interpretation erfordert etwas mehr Aufwand, als das.
===== Nvidia Kernel-Modul =====
Nach einem neuen Kernel heißt es einmal den Display-Manager (Annahme: “lightdm”) killen und das neue Modul bauen. Auf grap* ist CUDA 7.5 installiert, da sehen die Aufrufe wie folgt aus:
$ sudo su
$ cd /root/cuda [ggf.]
$ /etc/init.d/lightdm stop [1. Variante]
$ service lightdm stop [2. Variante]
$ sh ./cuda_7.5.18_linux.run --driver --silent
$ modprobe nvidia
$ nvidia-smi
Sollte keine Fehler ausgeben.
[[#fnt__1|1)]] 1000, 4096
[[#fnt__2|2)]] 1, 1000