2016-12-18 2 views
0

Mit der BVLC-Referenz-AlexNet-Datei habe ich ein CNN gegen ein Trainingssatz trainiert, den ich erstellt habe. Um den Fortschritt des Trainings zu messen, habe ich eine grobe Methode verwendet, um die Genauigkeit gegenüber den Trainingsdaten zu approximieren. Meine Stapelgröße auf dem Testnetz ist 256. Ich habe ~ 4500 Bilder. Ich führe 17 Aufrufe an solver.test_nets [0] .forward() durch und notiere den Wert von solver.test_nets [0] .blobs ['accuracy']. Data (die Genauigkeit dieses Vorwärtsdurchlaufs). Ich nehme den Durchschnitt über diese. Mein Gedanke war, dass ich 17 zufällige Stichproben von 256 aus meinem Validierungssatz nahm und die Genauigkeit dieser zufälligen Stichproben erhielt. Ich würde erwarten, dass sich dies der wahren Genauigkeit gegenüber dem gesamten Satz annähert. Später ging ich jedoch zurück und schrieb ein Skript, um jedes Element in meiner LMDB durchzugehen, damit ich eine Konfusionsmatrix für mein gesamtes Testset generieren konnte. Ich entdeckte, dass die wahre Genauigkeit meines Modells deutlich niedriger war als die geschätzte Genauigkeit. Zum Beispiel sank meine erwartete Genauigkeit von ~ 75% auf ~ 50% wahre Genauigkeit. Das ist ein weitaus schlechteres Ergebnis als ich erwartet hatte.Wie bestimmt Caffe die Genauigkeit des Testsatzes?

My assumptions match the answer given here.

Habe ich irgendwo eine falsche Annahme gemacht? Was könnte für den Unterschied verantwortlich sein? Ich hatte angenommen, dass die Funktion forward() eine zufällige Stichprobe sammelte, aber ich bin mir nicht sicher, ob das der Fall war. blobs. ['accuracy']. Daten ergaben jedes Mal ein anderes Ergebnis (wenn auch normalerweise in einem kleinen Bereich), deshalb nahm ich das an.

Antwort

0

Ich hatte angenommen, dass forward() - Funktion eine zufällige Stichprobe gesammelt hat, aber ich bin nicht so sicher, dass das der Fall war. blobs. ['accuracy']. Daten ergaben jedes Mal ein anderes Ergebnis (wenn auch normalerweise in einem kleinen Bereich), deshalb nahm ich das an.

Die forward() Funktion von Caffe keine Stichproben durchführt, wird es nur die nächste Partie holen nach Ihren DataLayer. ZB in Ihrem Fall forward() werden die nächsten 256 Bilder in Ihrem Netzwerk übergeben. Wenn Sie dies 17 Mal durchführen, werden nacheinander 17x256=4352 Bilder übertragen.

Habe ich irgendwo eine falsche Annahme gemacht? Was könnte für den Unterschied verantwortlich sein?

Überprüfen Sie, ob das Skript, das Ihre gesamte LMDB durchläuft, die gleiche Datenvorverarbeitung durchführt wie während des Trainings.

Verwandte Themen