2017-12-05 3 views
-1

Ich baue ein CNN-Modell mit Tensorflow, ohne die Verwendung von Front-End-APIs wie Keras. Ich erstelle ein VGG-16-Modell und verwende die vortrainierten Gewichte und möchte die letzten Schichten fein abstimmen, um meinen Zweck zu erfüllen.Convolutional Neural Network mit TensorFlow

Nach dem Tutorial hier, http://cv-tricks.com/tensorflow-tutorial/training-convolutional-neural-network-for-image-classification/ Ich erstellte das Trainingsskript und modifizierte nach meinen Anforderungen. Mein Training findet jedoch nicht statt und die Trainingsgenauigkeit liegt bei 50,00% und die Validierungsgenauigkeit bildet ein Muster, das die Zahlen wiederholt. Attached ist der Screenshot des gleichen. terminal output of the training script

Ich bin seit Tagen auf diesem fest und kann nicht scheinen, den Fehler zu finden. Jede Hilfe wird geschätzt.

Der Code ist ziemlich lang und daher ist hier die gist file für die gleiche

Antwort

0

Ihre Kreuzentropie falsch ist, werden Sie Ihre Logits mit dem softmax Ihrer Logits zu vergleichen. Diese

:

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=layer_fc2, 
                labels=y_pred) 

Sollte sein:

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=layer_fc2, 
                labels=y_true) 

Einige Dinge zu beachten. Ich würde nicht an einem Datenpunkt trainieren und dann am selben Datenpunkt auswerten. Ihre Trainingsgenauigkeit wird wahrscheinlich dadurch verzerrt sein. Ein weiterer Punkt ist zu beachten, dass tf.argmax(tf.softmax(logits)) das gleiche wie ist.

+0

Vielen Dank für die Antwort. Ich habe die Änderung vorgenommen, die Sie in "cross_entropy" vorgeschlagen haben. Dennoch bleibt die Trainingsgenauigkeit bei 50,00% hängen und die Validierung ergibt ein sich wiederholendes Muster. Irgendein anderer Fehler in meinem Code? –

+0

bitte sehen Sie es sich an. @ thomas-pinetz –

+0

Was ich in solchen Fällen mache, ist die Eingabe und die Ausgabe meines Modells zu betrachten. Wenn die Ausgabe dieser Tests der trainierten Genauigkeit entspricht, werde ich die Gradienten betrachten. Sind sie 0 oder etwas Unheimliches, würde ich mir die Verlustfunktion ansehen. Es ist schwer für mich, Fehler in einem Code so lange zu finden, ohne ihn ausführen zu können. –

Verwandte Themen