引言
在上一篇博客中,我们解决了训练误差大于测试误差的问题,在寻找bug的路上,我又发现了另一个之前没有注意的bug。
在以前的实验中,好几次我使用tf.reduce_mean(tf.reduce_sum())的时候出现"nan"提示。但是当我换成tf.reduce_sum()/n的时候就显示正常了。因此我觉得在任何时候都可以这么替换。
当然在bp反向传播+3层全连接神经网络+softmax交叉熵损失+代码实现详解这篇博客中确实可以,可以如此使用的原因是因为没有用到tensorflow的计算图。
问题描述
a=10
b=constant(20)
result = b/a
with Session() as sess:
print sess.run(result)
a=20
print sess.run(result)
类似这样的代码,经过运行以后的结果都是2,而不是1。
也就是说在tensorflow的运行机制中,对于常量和变量的定义是非常严格的。我们如果真的需要用到"变量的时候",可以通过
(1)、变量tf.Variable
(2)、占位符
的形式传入变量。而不能通过简单的指定。
问题延伸
明白这个问题以后,那么对于loss中求平均的方法是不是就可以通过设置"变量"的方式更新了呢?
博主用过占位符,pycharm一直提示有问题,然后就放弃了,因为想,既然有reduce_mean为什么非得大费周折去设置分母呢?
对于reduce_mean(reduce_sum())中出现"nan"的问题解决,请看下方链接:
Tensorflow解决reduce_mean出现"nan"提示