2016-08-02 3 views
5

Ich bin neu im maschinellen Lernen und versuche derzeit, ein Faltungsneuronetz mit 3 Faltungsschichten und 1 vollständig verbundenen Schicht zu trainieren. Ich verwende eine Abbruchwahrscheinlichkeit von 25% und eine Lernrate von 0,0001. Ich habe 6000 150x200 Trainingsbilder und 13 Ausgabeklassen. Ich benutze Tensorflow. Ich bemerke einen Trend, bei dem mein Verlust stetig abnimmt, aber meine Genauigkeit steigt nur geringfügig und fällt dann wieder ab. Meine Trainingsbilder sind die blauen Linien und meine Validierungsbilder sind die orangefarbenen Linien. Die x-Achse ist Schritte. enter image description hereWarum ist es möglich, in einem konvolutionellen neuronalen Netzwerk einen geringen Verlust, aber auch eine sehr geringe Genauigkeit zu erreichen?

Ich frage mich, ob es etwas gibt, was ich nicht verstehe oder was könnte mögliche Ursachen für dieses Phänomen sein? Aus dem Material, das ich gelesen habe, nahm ich an, dass ein geringer Verlust eine hohe Genauigkeit bedeutet. Hier ist meine Verlustfunktion.

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) 
+1

Haben Sie schonmal von * Übermaß * ​​gehört? – sascha

+1

Geringer Trainingsverlust sollte einen niedrigen Trainingsset-Fehler bedeuten. Wie niedrig ist dein Verlust? Ihre Skala ist auf Millionen, es ist nicht klar, Ihre Ausbildung Verlust ist gering (weniger als 1) aus der Grafik –

+0

Ja, ich habe von über Fitting gehört, aber ich war unter der Annahme, dass wenn Sie über fit sind Sie immer noch hohe Genauigkeit in Ihrem haben Trainingsdaten. Sorry über die Skala, mein Verlust lag zwischen 1-10, als ich mit dem Training fertig war. –

Antwort

4

, dass, weil Verlust ist und Genauigkeit sind zwei völlig verschiedene Dinge (und zumindest logisch)!

Betrachten wir ein Beispiel, wo Sie loss wie definiert haben:

loss = (1-accuracy) 

In diesem Fall, wenn Sie versuchen, automatisch loss, accuracy steigt zu minimieren.

nun ein weiteres Beispiel überlegen, wo Sie loss wie definieren:

loss = average(prediction_probabilities) 

Obwohl es keinen Sinn macht, ist es technisch noch eine gültige Verlustfunktion und Ihre weights werden noch abgestimmt, um auf solche zu minimieren loss.

Aber wie Sie sehen können, gibt es in diesem Fall keine Beziehung zwischen loss und accuracy, so dass Sie nicht erwarten können, beide gleichzeitig zu erhöhen/zu verringern.

Hinweis: Loss wird immer minimiert (daher sinkt Ihre loss nach jeder Iteration)!

PS: Bitte aktualisieren Sie Ihre Frage mit der loss Funktion, die Sie versuchen zu minimieren.

+2

Das OP hat kommentiert, dass sie logarithmische Multiclass-Klassen für einen Softmax-Ausgang verwenden. –

+0

@Sangram Hey! Ich habe mich gefragt, ob 'loss = average (prediction_probabilities)' minimiert wird, das bedeutet, dass meine 'precision_probabilities' der Grundwahrheit immer näher kommen, macht das meine Genauigkeit nicht besser? – deeplearning

+0

Nicht wirklich! Wenn Sie versuchen, ** loss = average (prediction_probabilities) ** zu minimieren, werden die Gewichte so abgestimmt, dass die Netzwerkausgabe tendenziell null ist und dies nichts mit der Genauigkeit zu tun hat. Wenn das Netzwerk für eine bestimmte Klasse (z. B. für die positive Klasse) genau eine Vorhersagewahrscheinlichkeit von Null ausgibt, ist die Genauigkeit nur die Prävalenz dieser Klasse. – Sangram

1

softmax_cross_entropy_with_logits() und die Genauigkeit sind zwei verschiedene Konzepte mit verschiedenen Formeldefinitionen. Unter normalen Umständen könnten wir höhere Genauigkeit erwarten, wenn wir die Softmax-Kreuzentropie minimieren, aber sie werden auf unterschiedliche Weise berechnet, sodass wir nicht erwarten konnten, dass sie immer synchron erhöht oder verringert werden.

Wir verwenden die Softmax-Cross-Entropie in CNN, weil sie für das Training neuraler Netzwerke effektiv ist. Wenn wir die Loss = (1-Genauigkeit) als Loss-Funktion verwenden, ist es sehr schwierig, durch die Anpassung der Gewichte für unser CNN-Neuralnetz mit unseren aktuellen ausgereiften Backprognation-Trainingslösungen ein besseres Ergebnis zu erzielen, das habe ich wirklich getan und diese Schlussfolgerung bestätigt Probieren Sie es selbst aus. Vielleicht ist es durch unsere aktuelle schlechte Backprognation Training Lösung verursacht, vielleicht ist es durch die Definition unserer Neuronen verursacht (wir müssen es auf einige andere Arten Neuron ändern?), Aber sowieso, derzeit, die Genauigkeit in der Verlust-Funktion ist kein effektiver Weg für Neuronennetzwerktraining, also benutze einfach softmax_cross_entropy_with_logits(), wie uns diese KI-Wissenschaftler gesagt haben, sie haben bereits bestätigt, dass dieser Weg effektiv ist, für andere Wege kennen wir sie noch nicht.

+0

Ich lerne gerade ein neues Online-Training und habe ein neues Verständnis davon, warum wir softmax_cross_entropy_with_logits() brauchen. Der Grund ist sehr einfach: Die Softmax-Cross-Entropie-Funktion ist eine konvexe Funktion, aber die meisten anderen Funktionen nicht. Wir könnten also den globalen Minimalwert finden, indem wir den lokalen Minimalwert in einer konvexen Funktion finden. Aber für eine nicht-konvexe Funktion, z.B. Verlust = (1-Genauigkeit), es hat mehrere lokale Minimalwerte, so dass es unmöglich ist, geeignete W & B-Werte mit unseren Backpropagation-Algorithmen zu finden. –

Verwandte Themen