[PYTHON] Verwenden Sie Maxout + CNN mit Pylearn2

Beachten Sie, dass ich bei der Verwendung von Maxout + CNN (Convolutional Neural Network) mit Pylearn2 stecken geblieben bin. GPU ist erforderlich.

Umgebung

Vorbereitung (für Windows)

Im Folgenden sind die Einstellungen und Änderungen aufgeführt, die in der Windows-Umgebung erforderlich sind. Es wird unter Linux oder Mac möglicherweise nicht benötigt, aber ich habe es nicht bestätigt.

Installieren Sie die pthread-Bibliothek

Da pthread in pylearn2 verwendet wird, installieren Sie es. Ohne pthread wird beim Lernen die folgende Fehlermeldung ausgegeben.

pylearn2 \ sandbox \ cuda_convnet \ nvmatrix.cuh (39) Schwerwiegender Fehler C1083: Include-Datei kann nicht geöffnet werden. 'pthread.h': Keine solche Datei oder kein solches Verzeichnis

Dieses Mal habe ich die Bibliothek von der folgenden Site heruntergeladen. https://sourceware.org/pthreads-win32/

Legen Sie den Pfad zur pthread-Bibliothek fest

Legen Sie den Pfad zur pthread-Bibliothek in pylearn2 / sandbox / cuda_convnet / pthreads.py fest. Ein Beispiel ist unten angegeben.

pthreads.py


from theano.configparser import AddConfigVar, StrParam

AddConfigVar('pthreads.inc_dir',
        "location of pthread.h",
        StrParam("C:\\lib\\pthreads-w32-2-9-1-release\\Pre-built.2\\include"))

AddConfigVar('pthreads.lib_dir',
        "location of library implementing pthreads",
        StrParam("C:\\lib\\pthreads-w32-2-9-1-release\\Pre-built.2\\lib\\x64"))

AddConfigVar('pthreads.lib',
        'name of the library that implements pthreads (e.g. "pthreadVC2" if using pthreadVC2.dll/.lib from pthreads-win32)',
        StrParam("pthreadVC2"))

Legen Sie pthreadVC2.dll im Ausführungsverzeichnis ab

Platzieren Sie die im POSIX-Thread enthaltene pthreadVC2.dll im folgenden Verzeichnis. pylearn2/scripts/papers/maxout

Wenn Sie pthreadVC2.dll nicht bereitstellen, tritt der folgende Fehler auf. Dies ist ein Fehler, der auftritt, weil die in der pyd-Datei referenzierte DLL nicht gefunden werden kann.

DLL load failed:

Wenn Sie einen ähnlichen Fehler erhalten, können Sie den Dependency Walker auf der folgenden Site verwenden, um die Abhängigkeiten Ihres Pyds zu überprüfen. http://www.dependencywalker.com/

Übergeben Sie den Pfad zur Bibliothek cuda_ndarray

Ich kompiliere eine cu-Datei, wenn ich mit Pylearn2 lerne, aber ein Linkfehler tritt auf. Ändern Sie die folgende Datei, um die Bibliothek cuda_ndarray laden zu können.

pylearn2/sandbox/cuda_convnet/convnet_compile.py


                    compiler.compile_str('cuda_convnet',
                            code,
                            location = cuda_convnet_loc,
                            include_dirs = [this_dir, config.pthreads.inc_dir] if config.pthreads.inc_dir else [this_dir],
                            lib_dirs = nvcc_compiler.rpath_defaults + [cuda_convnet_loc] + ([config.pthreads.lib_dir] if config.pthreads.lib_dir else []),
-                            libs = ['cublas', config.pthreads.lib] if config.pthreads.lib else ['cublas'],
+                            libs = ['cublas', 'cuda_ndarray', config.pthreads.lib] if config.pthreads.lib else ['cublas', 'cuda_ndarray'],
                            preargs = ['-O3'] + args,
                            py_module=False)

pylearn2/sandbox/cuda_convnet/base_acts.py


     def c_libraries(self):
         if config.pthreads.lib:
-            return ['cuda_convnet', config.pthreads.lib]
+            return ['cuda_convnet', 'cuda_ndarray', config.pthreads.lib]
         else:
-            return ['cuda_convnet']
+            return ['cuda_convnet', 'cuda_ndarray']

Lernen

Ich habe mnist.yaml in pylearn2 / scripts / papers / maxout von Pylearn2 verwendet. Die in dieser Datei verwendete Datei pylearn2.models.maxout.MaxoutConvC01B ist die Modellklasse Maxout + CNN. Für die Verwendung von MaxoutConvC01B ist eine GPU erforderlich. Nachdem Sie zu pylearn2 / scripts / papers / maxout navigiert haben, lernen Sie mit dem folgenden Befehl.

python ..\..\train.py mnist.yaml

Das trainierte Modell wird in mnist_best.pkl gespeichert.

Überprüfen Sie das Ergebnis

Erstellen Sie die folgende Datei und python mnist_result.py mnist_best.pkl Sie können das Erkennungsergebnis für die Testdaten durch Ausführen überprüfen. Es war 9940/10000 in meiner Umgebung.

mnist_result.py


import numpy as np
import pickle
import sys
import theano
import pylearn2.datasets.mnist as mnist
from pylearn2.space import VectorSpace


def simulate(inputs, model):
    space = VectorSpace(inputs.shape[1])
    X = space.get_theano_batch()
    Y = model.fprop(space.format_as(X, model.get_input_space()))
    f = theano.function([X], Y)
    result = []
    for x in xrange(0, len(inputs), 100):
      result.extend(f(inputs[x:x + 100]))
    return result

def countCorrectResults(outputs, labels):
    correct = 0;
    for output, label in zip(outputs, labels):
        if np.argmax(output) == label:
            correct += 1
    return correct
 
def score(dataset, model):
    outputs = simulate(dataset.X, model)
    correct = countCorrectResults(outputs, dataset.y)

    return {
        'correct': correct,
        'total': len(dataset.X)
    }

model = pickle.load(open(sys.argv[1]))
test_data = mnist.MNIST(which_set='test')
print '%(correct)d / %(total)d' % score(test_data, model)

Mehr erfahren

Wenn Sie nach dem Lernen mit mnist.yaml mit mnist_continued.yaml trainieren, werden Sie anscheinend mehr über mnist_best.pkl erfahren. Das trainierte Modell wird in mnist_continued.pkl gespeichert.

Recommended Posts

Verwenden Sie Maxout + CNN mit Pylearn2
Verwenden Sie mecab-ipadic-neologd mit igo-python
Verwenden Sie RTX 3090 mit PyTorch
Verwenden Sie pipdeptree mit virtualenv
[Python] Verwenden Sie JSON mit Python
Verwenden Sie den Indikator mit pd.merge
Verwenden Sie Mecab mit Python 3
Verwenden Sie Tensorboard mit Chainer
Verwenden Sie pip mit MSYS2
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Copyright mit Spacemacs
Verwenden Sie Python mit Docker
Verwenden Sie TypeScript mit Django-Kompressor
Verwenden Sie WENIGER mit Django
Verwenden Sie MySQL mit Django
Verwenden Sie Enum mit SQLAlchemy
Verwenden Sie Tensorboard mit NNabla
Verwenden Sie GPS mit Edison
Verwenden Sie nim mit Jupyter
Verwenden Sie die Trello-API mit Python
Verwenden Sie gemeinsam genutzten Speicher mit gemeinsam genutzten Bibliotheken
Verwenden Sie benutzerdefinierte Tags mit PyYAML
Verwenden Sie Richtungsdiagramme mit networkx
Verwenden Sie TensorFlow mit Intellij IDEA
CNN-Implementierung mit nur Numpy
Verwenden Sie die Twitter-API mit Python
Verwenden Sie pip mit Jupyter Notebook
Verwenden Sie sqlite3 mit NAO (Pepper)
Versuchen Sie, CNN mit ChainerRL auszuführen
Verwenden Sie die load_extensions von sqlite mit Pyramid
Verwenden Sie Windows 10-Schriftarten mit WSL
Verwendung von Chainer mit Jetson TK1
Verwenden Sie SSL mit Sellerie + Redis
Verwenden Sie Cython mit Jupyter Notebook
Erstellen Sie einfach CNNs mit Keras
Verwenden Sie WDC-433SU2M2 mit Manjaro Linux
Verwenden Sie OpenBLAS mit numpy, scipy
Überlebe Weihnachten mit CNN auf Charakterebene
Verwenden Sie die Unterschall-API mit Python3
Verwenden von Sonicwall NetExtener mit Systemd
Verwenden Sie prefetch_related bequem mit Django
Verwenden Sie einen AWS-Interpreter mit Pycharm
Verwenden von Bokeh mit IPython Notebook
Verwenden Sie Python-ähnliche Bereiche mit Rust
Verwenden Sie MLflow mit Databricks ④ - Anrufmodell -
Verwenden Sie pyright mit CentOS7, emacs lsp-mode
Python: So verwenden Sie Async mit
Verwenden der SQL-Datenbank von Azure mit SQL Alchemy
Verwenden Sie eine Point Grey-Kamera mit Python (PyCapture2).
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Verwenden Sie die Vorschaufunktion mit aws-cli
Markdown mit Jupyter-Notebook verwenden (mit Verknüpfung)
Verwenden Sie Python in pyenv mit NeoVim
Verwenden Sie Tensorflow 2.1.0 mit Anaconda unter Windows 10!
Verwenden Sie die Windows 10-Sprachsynthese mit Python
Verwenden Sie die Curl / JQ-Bibliothek mit Go
Ich kann kein Japanisch mit Pyperclip verwenden
Verwenden Sie die Kamerakalibrierungsdatei mit OpenCvSharp4