8

Dies ist meine train.prototxt. Und das ist meine deploy.prototxt.So erstellen Sie caffe.deploy von train.prototxt

Wenn ich möchte, dass meine deploy Datei ich diesen Fehler laden:

File "./python/caffe/classifier.py", line 29, in __init__ 
in_ = self.inputs[0] 
IndexError: list index out of range 

So entfernte ich die Datenschicht:

F1117 23:16:09.485153 21910 insert_splits.cpp:35] Unknown bottom blob 'data' (layer 'conv1', bottom index 0) 
*** Check failure stack trace: *** 

als ich bottom: "data" aus KONV1 Schicht entfernt.

Nachdem bekam ich diesen Fehler:

F1117 23:17:15.363919 21935 insert_splits.cpp:35] Unknown bottom blob 'label' (layer 'loss', bottom index 1) 
*** Check failure stack trace: *** 

I entfernt bottom: "label" aus Verlustschicht. Und ich habe diesen Fehler:

I1117 23:19:11.171021 21962 layer_factory.hpp:76] Creating layer conv1 
I1117 23:19:11.171036 21962 net.cpp:110] Creating Layer conv1 
I1117 23:19:11.171041 21962 net.cpp:433] conv1 -> conv1 
F1117 23:19:11.171061 21962 layer.hpp:379] Check failed: MinBottomBlobs() <= bottom.size() (1 vs. 0) Convolution Layer takes at least 1 bottom blob(s) as input. 
*** Check failure stack trace: *** 

Was soll ich tun, um es zu beheben und meine Deploy-Datei zu erstellen?

Antwort

16

Es gibt zwei wesentliche Unterschiede zwischen einem „Zug“ prototxt und einem „bereitstellen“ ein:

1. Eingänge: Während für Trainingsdaten zu einem vorverarbeiteten Trainingsdaten festgelegt (LMDB/HDF5 usw. .), die Bereitstellung des Netzes erfordern es, andere Eingaben in einer "zufälligen" Art und Weise zu verarbeiten.
Daher besteht die erste Änderung darin, die Eingabeschichten zu entfernen (Ebenen, die während der ZUG- und TEST-Phasen "Daten" und "Etiketten" drücken). Um die Eingangsschichten ersetzen müssen Sie die folgende Erklärung hinzuzufügen:

input: "data" 
input_shape: { dim:1 dim:3 dim:224 dim:224 } 

Diese Erklärung nicht die tatsächlichen Daten für das Netz zur Verfügung stellen, aber es sagt das Netz, welche Form zu erwarten, so dass caffe notwendige Ressourcen vorbelegt .

2. Verlust: Die obersten Schichten in einem Trainingsprototxt definieren die Verlustfunktion für das Training. Dies beinhaltet normalerweise die Grundwahrheitsbezeichnungen. Wenn Sie das Netz bereitstellen, haben Sie keinen Zugriff mehr auf diese Beschriftungen. Daher sollten Verlustschichten in "Vorhersage" -Ausgaben umgewandelt werden. Beispielsweise sollte eine "SoftmaxWithLoss" -Schicht in eine einfache "Softmax" -Schicht konvertiert werden, die Klassenwahrscheinlichkeit anstelle von Log-Likelihood-Verlust ausgibt. Einige andere Verlustschichten haben bereits Vorhersagen als Eingaben, daher ist es ausreichend, sie einfach zu entfernen.

Update: siehe this tutorial für weitere Informationen.

+0

Was ist "dim: 1"? – 0x1337

+1

@ 0x1337 Um die Form der Eingabe "Daten" zu definieren, verwenden wir [''BlobShape''] (https://github.com/BVLC/caffe/blob/master/src/caffe/proto /caffe.proto#L6) Proto-Nachricht. Diese "Form" hat einen "wiederholten" Parameter "dim", der eine Dimension der "Form" definiert. "dim: 1" bedeutet, dass wir erwarten, dass "Daten" bei der Bereitstellungsphase nur jeweils einen Abtastwert umfassen (d. h. "Stapelgröße: 1"). – Shai

+1

@Shai Danke für eine klare Erklärung. Gibt es eine Möglichkeit, den deploy.prototxt in Python ähnlich zu generieren?Mehr Details über meine Frage sind hier - http://StackOverflow.com/Questions/40986009/how-to-programmatic-generate-deploy-txt-for-coffe-in-python – cdeepakroy

0

Neben den Hinweisen von @Shai möchten Sie möglicherweise auch die Dropout-Layer deaktivieren.

Obwohl Jia Yangqing, Autor von Caffe einmal gesagt, dass Dropout Schichten vernachlässigbaren Einfluss auf die Testergebnisse (google group conversation, 2014) haben, andere Deeplearning Tools vorschlagen Aussetzer in der Bereitstellungsphase deaktivieren (zB lasange).

+1

hängt davon ab, wie deine Dropout-Ebene implementiert ist. In einigen Fällen müssen Sie das Dropout durch eine Skalierung ersetzen, um die erhöhte Energie des Signals zu kompensieren, die nicht abfällt: Wenn Sie beispielsweise 50% abfallen, dann haben Sie in der Testzeit x2 mehr Signalstärke durch die Ebene müssen den Output um 50% reduzieren. – Shai