2016-04-12 9 views
0

Ich versuche, Ziffern (0-9) zu klassifizieren, mit LeNet.caffe.io.Transformer für LeNet-Klassifizierung verwenden

Ich lese Bilder der Dimension 28x28, transponiere sie und schicke einen Farbkanal ins Netz.

bild = mpimg.imread('pathToImg') 
bild = np.transpose(bild,(2,0,1)) 

Und erhalten Sie Prognosen, die überhaupt keinen Sinn machen. Ich sehe, dass PyCaffe einen Transformator hat, der diese Arbeit erledigt, aber ich weiß nicht, wie ich es für LeNet verwenden würde.


ich verwende das Netz von caffe/examples/mnist (hoffentlich, dass die Antworten welche Art von Daten die Netto erwartet).

Das einzige, was anders ist, ist, dass der Eingang ist jetzt:

input_shape { 
    dim: 1 
    dim: 1 
    dim: 28 
    dim: 28 
} 
+0

Welchen Input erwartet Ihr Netz? 'float32' im Bereich [0..255], Bereich [0..1]? Zieht Ihr Netz den Mittelwert des Bildes ab? warum konvertierst du nicht in grau? Wie wurden die Eingaben während des Trainings des Netzes verarbeitet? – Shai

+0

Aktualisiert die Frage –

Antwort

1

Da Sie direkt mit dem deploy prototxt verwenden, können Sie einen Blick auf die „Daten“ Schicht in lenet_train_test.prototxt nehmen sollte (oder ein Datei mit einem ähnlichen Namen), die Ihnen anzeigt, wie Daten vorverarbeitet werden.

Mit Blick auf die Dateien, die ich habe, scheint es, dass das LeNet-Beispiel die Skalierung aller Eingabedaten durchführt. Dies wird durch die folgenden Zeilen in der "Daten" -Schicht angezeigt:

transform_param { 
    scale: 0.00390625 
} 

Das ist also eine Sache, die Ihnen vielleicht fehlt. Werfen Sie einen Blick auf imagenet tutorial für Zeiger auf Vorverarbeitung (esp Transformer). Zweitens sind Sie als

in der Bildlese
bild = np.transpose(bild,(2,0,1)) 

Dies sieht aus wie ein Fehler auf Basis der Kanal Swaps Sie ausführen, so stellen Sie sicher, dass die an das Netzwerk gesendeten Daten die Dimensionen hat - 1 (Losgröße) x 1 (Kanäle) x 28 (Höhe) x 28 (Breite).