Tensorflow--改变的"变量"真的变了吗?

引言

在上一篇博客中,我们解决了训练误差大于测试误差的问题,在寻找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"提示

发布了21 篇原创文章 · 获赞 5 · 访问量 384

猜你喜欢

转载自blog.csdn.net/def_init_myself/article/details/104518974