2015-11-21 2 views

risposta

5

(1) Sei sicuro di aver bisogno di questo? Riducendo al minimo lo l2 loss si otterrà lo stesso risultato della riduzione dell'errore RMSE. (Walk through the math: non hai bisogno di prendere la radice quadrata, perché minimizzare x^2 minimizza ancora x per x> 0, e sai che la somma di un mazzo di quadrati è positiva. Minimizzare x * n minimizza x per costante n).

(2) Se avete bisogno di conoscere il valore numerico dell'errore RMSE, poi attuare direttamente dal definition of RMSE:

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

(È necessario conoscere o calcolare n - il numero di elementi nel somma, e impostare l'asse di riduzione in modo appropriato nella chiamata a reduce_somma).

+1

@dga Non sarebbe 'tf.sqrt (tf.reduce_mean (...))' un'opzione migliore qui? – goelakash

+1

@goelakash - probabilmente! Ho cercato la traslitterazione più chiara della tipica formula RMSE che ho collegato, ma in pratica, 'tf.reduce_mean' è una scelta migliore. – dga

+0

Dato che sembri abbastanza nel calcolo delle perdite potresti essere in grado di aiutarmi con questa domanda: [domanda] (https://stackoverflow.com/questions/44717224/when-using-rmse-loss-in-tensorflow-i -receive-very-small-loss-values-smalerl-than) @dga – thigi

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

Almeno si prega di accettare la risposta: D –

8

La formula per root mean square error è:

enter image description here

Il modo per implementare in TF è tf.sqrt(tf.reduce_mean(tf.squared_difference(Y1, Y2))).


La cosa importante da ricordare è che non è necessario minimizzare la perdita di RMSE con l'ottimizzatore. Con lo stesso risultato è possibile minimizzare solo tf.reduce_mean(tf.squared_difference(Y1, Y2)) o anche tf.reduce_sum(tf.squared_difference(Y1, Y2)) ma poiché hanno un grafico più piccolo delle operazioni, saranno ottimizzati più velocemente.

Ma è possibile utilizzare questa funzione se si desidera solo trarre il valore di RMSE.