TensorFlow:实现均方误差

3

我目前正在学习TensorFlow,并看到了这个notebook

我对均方误差代价函数的实现方式有疑问:

import tensorflow as tf 
import numpy as np 

predicted = np.array([1,2,3])
Y = np.array([4,5,6])
num_instances = predicted.shape[0]

cost = tf.reduce_sum(tf.pow(predicted-Y, 2))/(2*num_instances)
cost2 = tf.reduce_mean(tf.square(predicted - Y))

with tf.Session() as sess:
  print(sess.run(cost))
  print(sess.run(cost2))

我不明白为什么第一个代价函数的分母要乘以2。我从不同的MSE实现中得到了不同的答案,cost得到了4.5,而cost2得到了9。根据均方误差的公式,我应该得到一个值为9。但是第一个代价函数是我正在尝试学习的Python笔记本中实现的那个。

添加1/2因子有助于抵消平方项导数中得到的2。正如下面的答案所说,它对学习影响不大。 - Autonomous
1个回答

2
< p > costcost2 的区别在于 2*num_instances 中确切的数值是 2。基本上,

cost = tf.reduce_sum(tf.pow(predicted-Y, 2))/(2*num_instances)
cost2 = tf.reduce_sum(tf.pow(predicted-Y, 2))/(num_instances)

标量2对学习影响不大,相当于将学习率乘以2。请注意,无论使用什么公式和网络拓扑结构,您仍需要选择合理的超参数,包括学习率。

您可以尝试检查两个损失函数的收敛情况,我怀疑它们表现相同。这意味着两个公式都可以,第二个公式只是更容易实现。


1
OP具有使用tf.reduce_sumtf.reduce_mean的损失函数。 - mrgloom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接