Ich teste das Tensorflow-Framework mit einem Regressionsproblem. Meine Eingabe hat viele Funktionen und meine Ausgabe nur eine. Für jetzt funktioniert es, aber ich denke, dass meine Kostenfunktion nicht genau ist, was ich will, also habe ich ziemlich niedrige Genauigkeit.Neuronale Netze: Entwurf der Kostenfunktion "nicht unterscheidbar"/Tensorflow
Mein Ziel ist es, die Leistung innerhalb eines 10% -Bereich der aktuellen Ausgangsvorherzusagen, dh für jeden Ausgang sagen:
if (y_actual - y_predicted) < 0.1 * y_actual :
cost = 0
else :
cost = 1
Also für einen vorhergesagten Ausgangsvektor von: [130, 35, 65, 43]
vs einer aktuellen Ausgabe Vektor von [125, 10, 75, 40]
, sollte ich eine Kosten von 2 bekommen. (130 und 40 sind in den 10%, 35 und 65 sind nicht)
Für jetzt verwende ich einen quadratischen Unterschied.
cost = tf.reduce_sum(tf.squared_difference(y_predicted,y_)/(2*nb_batches))
Also eigentlich, erhalte ich eine ziemlich gute Vorhersage für die Summe der Ausgaben, aber ich habe nur eine 60% ige Genauigkeit, wenn ich eine Vorhersage prüfen genau zu sein, wenn es in dem 10% der tatsächlichen Ausgabe ist. Meine Genauigkeit ist so geschrieben:
with tf.name_scope('accuracy'):
with tf.name_scope('correct_prediction'):
correct_prediction = tf.less_equal(tf.abs((y_predicted-y_)), 0.1*tf.abs((y_))) # True if y_diff <= 10% * y_actual
with tf.name_scope('accuracy'):
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # count 1 if correct prediction is True ; else False ; Do the sum on all the data tested
tf.scalar_summary('accuracy', accuracy)
Ich habe versucht, andere Kostenfunktionen zu schreiben wie:
cost = tf.reduce_sum(tf.cast((tf.greater_equal(tf.abs((y_predicted-y_)), 0.1*tf.abs(y_))),tf.float32)
Aber ich habe den Fehler: No gradients provided for any variable
. Ich denke, das liegt daran, dass wir die Ableitung von tf.cast
nicht bekommen können.
Gibt es eine geeignete Möglichkeit, eine Verlustfunktion zu schreiben, die meinen Anforderungen entspricht? Ich weiß, dass die Verlustfunktion, die ich will, nicht "ableitbar" ist. Denken Sie, dass die Umwandlung in eine ableitbare Funktion eine Lösung wäre?
Ich bin nicht sicher, ob ich war sehr klar ...
Vielen Dank für Ihre Hilfe!
Paul
Ich denke, der Fehler tritt auf, wenn es keinen Pfad von den Variablen zur Verlustfunktion gibt. Könnte ein möglicher Fehler in Ihrer Diagrammdefinition sein. – shekkizh
Ja, ich denke, dass Tensorflow mit tf.cast nicht in der Lage ist, zu den Variablen zurück zu kommen ... Aber da die Kosten ein Float sein müssen ... –
Haben Sie zufällig eine Arbeit für 'tf.cast gefunden? '? –