Tensorflow 不是确定性的,它应该在哪里

标签 tensorflow

我有一个小型网络。训练 [许多小时] 并保存到检查站。 现在,我想在不同的脚本中从检查点恢复并使用它。 我重新创建 session :构建整个网络,s.t.使用我在训练前所做的完全相同的代码再次创建所有操作。 此代码使用 time.time() 为 TF 设置随机种子 [每次运行都不同]。

然后我从检查点恢复。我运行网络,每次运行恢复后的网络时都会得到不同的数字 [微小但有意义的差异]。至关重要的是,输入是固定的。 如果我将随机种子固定为某个值,非确定性行为就会消失。

我很困惑,因为我认为恢复 [没有提供要保存的变量,所以我假设所有图形都已设置检查点] 消除了此流程中的所有随机行为。初始化等被恢复的检查点覆盖,这只是向前运行。

这可能吗?有道理?有没有办法找出我的图表中哪些变量或因素不是由恢复的检查点设置的?

最佳答案

好像这个问题已经在评论中回答了,但是还没有人明确写下答案,所以这里是:

您期望计算图始终返回相同的值,即使使用不同的随机种子也是如此,因为您认为您的图中不应该有任何依赖于随机种子的 Op。

你忘记了 dropout。

无论如何,我都会始终保持随机种子不变。然后这个和任何其他随机操作都是确定性的,你的整个训练也可以。如果您想知道在某个时候不同的随机种子会得到多少方差,您可以明确地尝试其他随机种子。

关于Tensorflow 不是确定性的,它应该在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36984291/

相关文章:

python - Tensorflow、平方根激活函数实现(整形误差)

python - tensorflow-serving-apis - 找不到 python 文档

python - tf.where 导致优化器在 tensorflow 中失败

tensorflow - Tensorflow 的 CUDA_HOME 路径

python - 在 tensorflow 中,如何将索引列表转换为指标向量?

tensorflow - sparse_to_dense 要求索引在 0.7 中按字典顺序排序

python-3.x - Eager Execution,tf.GradientTape 只返回 None

tensorflow - 动量优化器的学习率变化

python - 为什么将 `tf.while_loop` 中的常量 i 用作 `loop_vars` ?

python - ValueError : Error when checking input: expected gru_5_input to have shape (None, None, 10) 但得到形状为 (1, 4, 1) 的数组