2017-10-30 13 views
1

私はTF.Metrics.Mean_Squared_Errorを渡すラベル/予測に関係なく、常に0の値を返します。TensorFlow平均二乗誤差メトリックは常に0を返します

a = tf.constant([0,0,0,0]) 
b = tf.constant([1,1,1,1]) 
mse, update = tf.metrics.mean_squared_error(a,b) 
sess = tf.Session() 
sess.run(tf.global_variables_initializer()) 
sess.run(tf.local_variables_initializer()) 
mse.eval(session=sess) 

0.0

答えて

1

を返し%%それがそのように動作し、なぜ私は本当に知りませんが、あなたが実際に内部状態の前にupdateを実行する必要があります。ここでは

は、問題を複製したコードですMSEのアカウントにデータを取ります

a = tf.constant([0,0,0,0]) 
b = tf.constant([1,1,1,1]) 
mse, update = tf.metrics.mean_squared_error(a,b) 
sess = tf.Session() 
sess.run(tf.global_variables_initializer()) 
sess.run(tf.local_variables_initializer()) 
mse.eval(session=sess) # Gives 0.0, the initial MSE value 
update.eval(session=sess) # Gives 1.0, the value of the update for the mse 
mse.eval(session=sess) # Gives 1.0, which is 0.0+1.0, the updated mse value 

tf.metrics.mean_squared_error()は、例えば、データセット全体にMSEを計算するためのものなので、あなたはいけませんさ独立してバッチの結果が必要な場合は、それを使用してください。そのためには、たとえばtf.losses.mean_squared_error(a, b, loss_collection=None)を使用します。

+0

データの各バッチに対してmseを取得したい場合は、何とかリセットする必要がありますか?私。 0に戻り、ゼロ以外の更新を追加しますか? – zephyrus

+1

私は私の答えを編集しました – gdelab

+0

ありがとう!しかし、私はまだMSEを再実行したいのかという疑問があります。具体的には、各エポックの最後に検証セットのMSEを評価したいと思います。では、MSEをリセットして次回の実行時にすべてのエポックにMSEを追加/平均するだけではないようにするにはどうすればよいですか? – zephyrus

関連する問題