1. ホーム
  2. python

[解決済み] Tensorflowの平均二乗誤差損失関数

2022-02-05 02:09:20

質問

Tensorflowの回帰モデルについて、様々な投稿でいくつかの異なる平均二乗誤差損失関数を見かけました。

loss = tf.reduce_sum(tf.pow(prediction - Y,2))/(n_instances)
loss = tf.reduce_mean(tf.squared_difference(prediction, Y))
loss = tf.nn.l2_loss(prediction - Y)

これらはどのような違いがあるのでしょうか?

どのように解決するのですか?

3番目の式は異なっていますが、1番目と2番目は形式的には同じですが、数値の関係で挙動が異なっていると言えるでしょう。

私は、3番目の式(使用 l2_loss ) は,ユークリッドノルムの2乗の1/2,つまり,入力の要素ごとの2乗の和を返しているだけであり,これは x=prediction-Y . どこもサンプル数で割っていないのですね。したがって、サンプル数が非常に多い場合、計算がオーバーフローする(Infを返す)可能性があります。

他の2つは形式的には同じで、要素ごとの2乗の平均を計算します。 x テンソルです。しかし、ドキュメントには明示されていないが、おそらくは reduce_mean は、非常に多くのサンプルでオーバーフローしないように適応されたアルゴリズムを使用しています。言い換えれば,最初にすべてを合計しようとはしないでしょう. 次に Nで割るのではなく、任意のサンプル数でも必ずしもオーバーフローを起こさず適応できる、ある種の転がり平均を使用する。