[PYTHON] Ein Amateur versuchte Deep Learning mit Caffe (Übung)

Einführung

Dieser Beitrag

  1. Was ist Deep Learning? Übersicht
  2. Installieren Sie Caffe, eine der Deep Learning-Bibliotheken Einführung.
  3. Lassen Sie uns ein einfaches Lernen mit der Caffe Practical Edition durchführen (dieser Beitrag) Es besteht aus drei

Obwohl es auch im Titel enthalten ist, handelt es sich um einen Beitrag über eine Aufzeichnung, die von einem Amateur hinterlassen wurde, der weder ein Deep Learning-Forscher noch irgendetwas ist. Bitte verzeihen Sie mir eine falsche Beschreibung und lesen Sie sie. (Wenn etwas nicht stimmt, würde ich es begrüßen, wenn Sie in den Kommentaren darauf hinweisen könnten) Da es viele Dinge gibt, die ich nicht unerwartet verstehe, wird die praktische Version nach und nach aktualisiert ...

Erkennen Sie die MNIST-Datenbank (handschriftliche Zeichen)

Als ersten Schritt

  1. Lernen Sie MNIST basierend auf offiziellen Informationen (bis zu diesem Punkt wird im Tutorial geschrieben)
  2. Erkennen Sie MNIST 28 * 28pixel JPEG-Bilder mithilfe des erlernten Netzwerks (aus irgendeinem Grund nicht im Lernprogramm beschrieben). Ich werde tun

Lass MNIST lernen

Verfolgen Sie, was in Official geschrieben steht.

Erstellen Sie eine Datenbank von MNIST

Im ursprünglichen Zustand, der von git geklont wurde, sind keine handgeschriebenen Zeichendaten zu lernen, daher werde ich sie unten ablegen Angenommen, CAFFE_ROOT ist als Umgebungsvariable festgelegt (wenn dies nicht festgelegt ist, legen Sie den Stamm des Caffe-Repositorys auf CAFFE_ROOT fest).

python


cd $CAFFE_ROOT
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh

Dies sollte hoffentlich zwei Ordner unter examples / mnist, mnist_test_lmdb und mnist_train_lmdb, mit einer Datenbank darin erstellen.

Trainiere mit einer Datenbank

Sobald Sie die Datenbank erstellt haben, können Sie das mitgelieferte Netzwerk und den Solver verwenden, um handschriftliche Zeichen zu lernen, ohne etwas Besonderes zu tun. Insbesondere endet es mit der folgenden Zeile. Die Zeit hängt von der Umgebung ab, aber ich denke, dass sie in 10 Minuten vorbei sein wird.

python


cd $CAFFE_ROOT
./examples/mnist/train_lenet.sh

Wenn das Training ordnungsgemäß durchgeführt wurde, werden lenets_iter_10000.caffemodel und lenet_iter_5000.caffemodel unter examples / mnist erstellt. Der einzige Unterschied zwischen 10000 und 5000 besteht darin, ob die Lerniteration das 10000. Netzwerk oder das 5000. Netzwerk ist.

Mal sehen, wie es vom erlernten MNIST-Netzwerk tatsächlich erkannt wird

Wenn Sie gemäß dem Lernprogramm aus der Datenbank lernen, können Sie feststellen, dass das Netzwerk etwas gelernt hat. Wenn Sie das Netzwerk jedoch nicht tatsächlich verwenden, können Sie nicht feststellen, ob es erfolgreich war oder nicht. Konvertieren wir also die obige Datenbank, in der 10000 Zeichen gespeichert sind, in JPEG mit jeweils einem Zeichen, geben Sie sie an das Netzwerk weiter und sehen Sie, welche Art von Ausgabe sie sein wird. Die in diesem Kapitel verwendeten Skripte befinden sich auf GitHub. Verwenden Sie sie daher bitte, wenn Sie möchten.

Machen Sie die Datenbank JPEG, um das Verständnis des Erkennungsziels zu erleichtern

Selbst wenn Sie sich die Datenbank ansehen, ist es schwierig zu verstehen, welche Zahl welches Zeichen ist. Machen Sie die in der Datenbank gespeicherten Daten zu JPEG Dieses Mal habe ich mein eigenes Skript und JPEG erstellt So (Python)

import scipy
import numpy as np
import lmdb
import sys
from caffe.io import caffe_pb2

def convert_to_jpeg(db_dir):
    env = lmdb.open(db_dir)
    datum = caffe_pb2.Datum()
    with env.begin() as txn:
        cursor = txn.cursor()
        for key_val,ser_str in cursor:
            datum.ParseFromString(ser_str)
            print "\nKey val: ", key_val
            print "\nLabel: ", datum.label
            rows = datum.height;
            cols = datum.width;
            img_pre = np.fromstring(datum.data,dtype=np.uint8)
            img = img_pre.reshape(rows, cols)
            file_name = str(key_val) + "_" + str(datum.label) + ".jpg "
            scipy.misc.toimage(img, cmin=0.0, cmax=255.0).save("data/mnist/jpg/" + file_name)

Wenn es sich um eine Datenbank in mnist_test_lmdb handelt, werden 10000 JPG-Bilder wie folgt generiert

python


cd $CAFFE_ROOT
python mnist_jpg_converter.py examples/mnist/mnist_test_lmdb/

Geben Sie das Bild an das Netzwerk und sehen Sie das Ergebnis

Schreiben Sie zuerst python / classify.py neu, das mit caffe geliefert wird, um das Netzwerk zu laden So was.

def main(argv):
    # --Abkürzung--

    # Make classifier.
    classifier = caffe.Classifier(args.model_def, args.pretrained_model)

    # Load numpy array (.npy), directory glob (*.jpg), or image file.
    args.input_file = os.path.expanduser(args.input_file)
    print("Loading file: %s" % args.input_file)
    grayimg = caffe.io.load_image(args.input_file, color=False)[:,:,0]
    inputs = [np.reshape(grayimg, (28, 28, 1))]

    print("Classifying %d inputs." % len(inputs))

    # Classify.
    start = time.time()
    predictions = classifier.predict(inputs)
    print("Done in %.2f s." % (time.time() - start))

    # --Abkürzung--

Verwenden Sie danach dieses Skript

python


cd $CAFFE_ROOT
python lenet_classify.py data/mnist/jpg/00000007_9.jpg result.npy

Wenn Sie dies tun, wird das Klassifizierungsergebnis in result.npy ausgegeben.

python


python my/show_mnist_result.py result.npy 
[[  6.68664742e-03   2.82594631e-03   8.81279539e-03   1.06628540e-05
    4.27712619e-01   1.90626510e-04   1.27627791e-04   9.20879841e-03
    4.14795056e-02   5.02944708e-01]]

Da die Elemente in der Spalte in der Reihenfolge 0, 1, 2, ..., 9 angeordnet sind, beträgt die Wahrscheinlichkeit für 9 etwa 50%, was höher ist als bei jedem anderen Klassifizierungsergebnis, sodass das Netzwerk ordnungsgemäß lernt. Du kannst nachschauen (Die nächsthöhere Wahrscheinlichkeit ist 4, aber 9 und 4 sehen ähnlich aus, daher denke ich, dass es ein überzeugendes Ergebnis ist.)

Danke für deine harte Arbeit

Verweise

Deep Learning mit Caffe, konzentriert sich auf Orte, an denen Sie leicht stolpern können Einfache Bildklassifizierung mit Caffe

Recommended Posts

Ein Amateur versuchte Deep Learning mit Caffe (Übung)
Ein Amateur versuchte Deep Learning mit Caffe (Einführung)
Ein Amateur hat Deep Learning mit Caffe ausprobiert (Übersicht)
Ich habe versucht, mit Theano tief zu lernen
Deep Learning 1 Übung des Deep Learning
Ich habe versucht, tief zu lernen
Ich habe versucht, das Objekterkennungs-Tutorial mit dem neuesten Deep-Learning-Algorithmus auszuführen
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 5
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 2
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 3
Ich habe versucht, ein Deep-Learning-Modell von TensorFlow mit TensorFlow Serving zu hosten
Ein Amateur stolperte in Deep Learning von Grund auf neu. Hinweis: Kapitel 7
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 5
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 1
Ein Amateur stolperte über Deep Learning ❷ von Grund auf neu Hinweis: Kapitel 4
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 4
Ein Amateur stolperte in Deep Learning von Grund auf neu Hinweis: Kapitel 2
Ich habe versucht, mit PyBrain verstärkt zu lernen
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Aktienkursprognose mit Deep Learning (TensorFlow)
[Kaggle] Ich habe versucht, Ensemble mit LightGBM zu lernen
[Python] Wenn ein Amateur mit dem maschinellen Lernen beginnt
Ich habe versucht, Pytorchs Deep-Learning-Modell mit TorchServe auf Amazon SageMaker zu hosten
Tiefes Lernen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Deep Learning-Anfänger versuchten die Wettervorhersage aus meteorologischen Satellitenbildern mit Keras
Ich habe die gängige Geschichte der Vorhersage des Nikkei-Durchschnitts mithilfe von Deep Learning (Backtest) ausprobiert.
[Python] Deep Learning: Ich habe versucht, Deep Learning (DBN, SDA) ohne Verwendung einer Bibliothek zu implementieren.
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Aktienkursprognose mit Deep Learning (TensorFlow) -Teil 2-
[Kausalsuche / Kausalinferenz] Führen Sie mit Deep Learning eine Kausalsuche (SAM) durch
Aktienkursprognose mit Deep Learning [Datenerfassung]
Deep Learning Memorandum
Starten Sie Deep Learning
Python Deep Learning
Deep Learning × Python
[Pokemon-Schwertschild] Ich habe versucht, die Urteilsgrundlage des tiefen Lernens anhand der Drei-Familien-Klassifikation als Beispiel zu visualisieren
Denken Sie über Party-Attack-ähnliche Wachstumstaktiken mit Deep Learning nach
Ich habe versucht, meinen eigenen Datensatz mit Chainer Trainer zu lernen
Ich habe versucht, mit AWS Lambda einen AMI zu erhalten
Ich habe versucht, mit OpenCV Ann Man zu werden
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
Ich habe versucht, Dropout zu erklären
Lassen Sie uns tief lernen! Unter Windows (VS2013 + caffe + CUDA7.5 + cudnn5.1)
Sammlung und Automatisierung erotischer Bilder durch Deep Learning
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
[Deep Learning von Grund auf neu] Ich habe versucht, die Gradientenbestätigung auf leicht verständliche Weise zu erklären.