2015-11-21 5 views
6

Ich habe Kostenfunktion in Tensorflow.Wie setze ich rmse Kostenfunktion in Tensorflow

activation = tf.add(tf.mul(X, W), b) 
cost = (tf.pow(Y-y_model, 2)) # use sqr error for cost function 

Ich probiere this example aus. Wie kann ich es in RMSE-Kostenfunktion ändern?

+0

Hallo @Viki, können Sie meine Antwort akzeptieren! –

Antwort

5

(1) Sind Sie sicher, dass Sie das brauchen? Wenn Sie minimieren, erhalten Sie dasselbe Ergebnis wie beim Minimieren des RMSE-Fehlers. (Gehen Sie durch die Mathematik: Sie müssen nicht die Quadratwurzel nehmen, weil die Minimierung von x^2 immer noch minimiert x für x> 0, und Sie wissen, dass die Summe einer Reihe von Quadraten positiv ist. Minimieren x * n minimiert x für Konstante n).

(2) Wenn Sie den Zahlenwert des RMSE Fehler wissen müssen, ist es dann direkt aus dem definition of RMSE implementieren:

tf.sqrt(tf.reduce_sum(...)/n) 

(Sie müssen n wissen oder berechnen - die Anzahl der Elemente in der summe und setze die Reduktionsachse im Aufruf von reduce_sum entsprechend.

+1

@dga Wäre nicht 'tf.sqrt (tf.reduce_mean (...))' hier eine bessere Option? – goelakash

+1

@goelakash - wahrscheinlich! Ich habe versucht, die typischste RMSE-Formel, die ich verlinkt habe, am klarsten zu transkribieren, aber in der Praxis ist "tf.reduce_mean" eine bessere Wahl. – dga

+0

Da Sie ziemlich in die Verlustberechnung scheinen, können Sie mir vielleicht mit dieser Frage helfen: [Frage] (https://stackoverflow.com/questions/44717224/when-using-rmse-loss-in-tensorflow-i -empfangen-sehr-kleine-Verlust-Werte-smalerl-als) @ dga – thigi

27
tf.sqrt(tf.reduce_mean(tf.square(tf.subtract(targets, outputs)))) 
+0

zumindest bitte akzeptieren Sie die Antwort: D –

8

Die Formel für root mean square error ist:

enter image description here

So wie es in TF zu implementieren ist tf.sqrt(tf.reduce_mean(tf.squared_difference(Y1, Y2))).


Die wichtige Sache zu erinnern ist, dass es keine Notwendigkeit gibt, RMSE-Verlust mit dem Optimierer zu minimieren. Mit dem gleichen Ergebnis können Sie nur tf.reduce_mean(tf.squared_difference(Y1, Y2)) oder sogar tf.reduce_sum(tf.squared_difference(Y1, Y2)) minimieren, aber weil sie eine kleinere Grafik von Operationen haben, werden sie schneller optimiert.

Aber Sie können diese Funktion verwenden, wenn Sie nur den Wert von RMSE tracten möchten.

Verwandte Themen