Dieser Beitrag
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 ...
Als ersten Schritt
Verfolgen Sie, was in Official geschrieben steht.
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.
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.
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.
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/
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
Deep Learning mit Caffe, konzentriert sich auf Orte, an denen Sie leicht stolpern können Einfache Bildklassifizierung mit Caffe
Recommended Posts