【问题标题】:How to create a CNN with deterministic operations in TensorFlow on a GPU?如何在 GPU 上的 TensorFlow 中创建具有确定性操作的 CNN?
【发布时间】:2017-12-01 16:11:28
【问题描述】:

所以当我意识到 TensorFlow 中有非确定性的操作后,请参阅这个问题:How to get the same loss value, every time training a CNN (MNIST data set), with TensorFlow?,我想知道:

如何构建卷积神经网络:

  • TensorFlow 版本 1.1.0
  • CUDA 发布 8.0、V8.0.61
  • cuDNN 5.1.10
  • 在 GPU 上运行

哪些只使用确定性操作?

【问题讨论】:

  • 我很好奇您为什么需要确定性培训。调试肯定是一个正当的理由,你还有别的想法吗?
  • @user1735003 是的,正在调试,我想比较具有不同参数的模型的结果。为了进行强大的比较,我需要强大的数据,但是对于非确定性操作,对于相同的输入和相同的模型,我会得到不同的结果,所以不是强大的数据。

标签: tensorflow convolution deterministic


【解决方案1】:

直到 cuDNN 上的每个操作都不是完全确定的,您才能做到这一点。 此外,即使移动 GPU 上的每个操作,如果它使用(并且可能确实使用)SSE 指令,您也可以多次执行相同(且没有随机性)的代码获得不同的结果。

为了接近你的目标,你可以做的最好的事情是为每个包含随机性的操作(操作级种子)设置seed,并为整个图设置种子(tf.set_random_seed(value))。

【讨论】:

  • 1) 一些 cuDNN 操作是/可以是确定性的,问题是哪一个。 2) 为什么使用 SSE 会产生不确定的输出?
  • 1) 在 cuDNN 中,卷积运算的梯度运算本身是不确定的 2) 阅读此处:blog.nag.com/2011/02/wandering-precision.html
  • 1) 这取决于您选择的算法,cuDNN 让您选择确定性的反向传播算法。 2)也在这里阅读:stackoverflow.com/questions/15147174/…
  • 1) 确实如此。但是 OP 应该更改 TF 源代码并重新编译它(并且也有减速的缺点,但我想他/她不介意)。 2) Ok 定义明确,但并非每个编译器都会生成对齐良好的代码(尽管它们应该,但我链接到你的文章却相反)
  • 感谢@nessuno 和 [at]user1735003 帮助我了解更多。那么实际上没有办法获得 CNN 的确定性结果吗?对于前馈网络,它可以,但对于卷积神经网络则不行。
猜你喜欢
  • 1970-01-01
  • 2018-12-01
  • 2018-06-09
  • 2018-04-13
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
相关资源
最近更新 更多