tensorflow - 这相当于mse?

时间:2017-10-19 13:14:55

标签: machine-learning tensorflow neural-network

我对TensorFlow很新,我注意到heretf.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})在测试集上?或者有什么区别?

1 个答案:

答案 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