我目前正在学习TensorFlow,并且遇到了这个笔记本。
我对均方误差成本函数的实现方式有一个问题:
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。我从不同的均方误差实现中得到了不同的答案,cost的值为4.5,而cost2的值为9。按照均方误差的公式,我应该得到9的值。但是在我正在学习的Python笔记本中实现的是第一个成本函数。
回答:
cost
和cost2
之间的差异正好是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
。请注意,无论你使用什么公式和网络拓扑,你仍然需要选择合理的超参数,包括学习率。
你可以尝试检查这两个损失函数的收敛情况,我怀疑它们的表现是相同的。这意味着这两个公式都可以,第二个公式只是更容易实现。