【发布时间】:2017-02-17 16:42:54
【问题描述】:
所以我有一个用 Tensorflow 编写的非常简单的 NN 脚本,我很难追踪一些“随机性”的来源。
我已经录了
- 权重,
- 渐变,
- 逻辑
在我训练时我的网络,对于第一次迭代,很明显一切都以相同的方式开始。我有一个用于读取数据的 SEED 值,以及一个用于初始化网络权重的 SEED 值。那些我永远不会改变的。
我的问题是,在每次重新运行的第二次迭代中,我开始看到 gradients 发散(少量,例如 1e-6 左右) .然而,随着时间的推移,这当然会导致不可重复的行为。
这可能是什么原因?我不知道任何可能的随机性来源可能来自哪里......
谢谢
【问题讨论】:
-
你使用 GPU 吗? GPU 上的各种操作由于使用 CUDA 原子(如 tf.reduce_sum)而具有不确定性
-
还有一些 SSE 优化会导致不确定的结果,您可以尝试编译没有任何优化的 TensorFlow,看看是否是这种情况(详情 -- blog.nag.com/2011/02/wandering-precision.html)
-
嗨 @YaroslavBulatov 是的,我确实在使用 GPU。
-
@YaroslavBulatov 对优化很感兴趣……还有关于 GPU 部分。这是否意味着无论是 CPU 还是 GPU,我们总能期望得到这种行为?那么,我们如何才能真正在 TF 中获得确定性结果?...
-
我也有类似的问题,请参阅:stackoverflow.com/questions/42412660/…
标签: random floating-point tensorflow precision random-seed