Table of Contents
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.
1) 1000, 4096
2) 1, 1000