2015-11-21 11 views
6

テンソルフローのコスト関数があります。テンソルフローでのrmseコスト関数の設定方法

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

私は試していますthis exampleです。 rmseコスト関数に変更するにはどうすればよいですか?

+0

こんにちは@Viki、あなたは私の答えを受け入れることができますか? –

答えて

5

(1)本当に必要ですか? l2 lossを最小化すると、RMSEエラーを最小化するのと同じ結果になります。 (x^2を最小化するとx> 0のxを最小化するので、平方根をとる必要はありません。定数nについて)。

あなたはRMSEエラーの数値を知る必要がある場合(2)、その後、definition of RMSEから直接それを実装:

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

(Nを知っているか計算する必要がある - の要素数をreduce_sumの呼び出しで、reduce軸を適切に設定します)。

+1

@dga 'tf.sqrt(tf.reduce_mean(...))'はここでより良いオプションになりますか? – goelakash

+1

@goelakash - おそらく!私はリンクした典型的なRMSE式の最も明瞭な音訳をしようとしていましたが、実際には 'tf.reduce_mean'が良い選択です。 – dga

+0

あなたは損失計算にかなり迷っているようですので、この質問で私を助けてくれるかもしれません:[質問](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

少なくとも答えを受け入れてください:D –

8

root mean square errorための式は:

enter image description here

TFでそれを実現する方法がtf.sqrt(tf.reduce_mean(tf.squared_difference(Y1, Y2)))あります。


覚えておくべき重要なことは、オプティマイザでRMSE損失を最小限にする必要がないことです。同じ結果では、ちょうどtf.reduce_mean(tf.squared_difference(Y1, Y2))またはtf.reduce_sum(tf.squared_difference(Y1, Y2))を最小限に抑えることができますが、操作グラフが小さいため、最適化が速くなります。

しかし、この機能は、RMSEの値をトラップするだけの場合に使用できます。