我对TensorFlow很新,我注意到here有tf.losses.mean_squared_error
来实现均方误差丢失函数。
在使用它之前,我玩过TF并写了
tf.reduce_mean(tf.reduce_sum(tf.square(tf.subtract(y, y_))))
然而,这会产生不同的结果。对我来说,它看起来是相同的公式。出了什么问题?
两种配方有何不同? (那么tf.nn.l2_loss
呢?)
另外,我正在尝试执行MLP,并且使用mse
丢失函数作为tf.train.GradientDescentOptimizer(0.5).minimize(mse)
的输入。可以使用此函数(mse = tf.losses.mean_squared_error(y, y_)
)(在回归问题中)也可以使用"准确度"使用sess.run(mse, feed_dict = {x:X_test, y: y_test})
在测试集上?或者有什么区别?
答案 0 :(得分:2)
这是因为你在取平均值之前求和,所以得到平方误差而不是它的均值。将tf.reduce_mean(tf.reduce_sum(tf.square(tf.subtract(y, y_))))
更改为tf.reduce_mean((tf.square(tf.subtract(y, y_)))
import tensorflow as tf
import numpy as np
y = tf.get_variable("y", [1, 5])
x = tf.get_variable("x", [1, 5])
sess = tf.Session()
t = tf.reduce_mean(tf.reduce_sum(tf.square(tf.subtract(y, x))))
t2 = tf.losses.mean_squared_error(x, y)
t3 = tf.reduce_mean(tf.square(tf.subtract(y, x)))
sess.run(t, {"x": np.ones((1, 5)), "y": np.zeros((1, 5))}) # 5
sess.run(t2, {x: np.ones((1, 5)), y: np.zeros((1, 5))}) # 1
sess.run(t3, {x: np.ones((1, 5)), y: np.zeros((1, 5))}) # 1