使用tensorflow-gpu获得可重现的结果

时间:2017-08-24 15:32:21

标签: machine-learning tensorflow deep-learning

使用Tensorflow处理项目。但是,我似乎无法重现我的结果。

我尝试过设置图级种子,numpy随机种子甚至操作级别种子。但是,它仍然不可重复。

在搜索Google时,大多数人都将reduce_sum函数指向罪魁祸首,因为即使在设置种子后,reduce_sum函数在gpu上也具有非确定性属性。但是,由于我正在开展纸张项目,我需要重现结果。还有其他有效的功能可以解决这个问题吗?

另一个建议是使用CPU。但是,我正在研究错误数据,这样的CPU不是一个选择。使用Tensorflow处理复杂项目的人如何解决这个问题?或者,审阅者可以加载已保存的模型检查点文件以进行结果验证?

1 个答案:

答案 0 :(得分:5)

很酷,您想要使结果可重复!但是,这里有很多事情要注意:

如果可以得到完全相同的论文,我将其称为可复制 通过执行完全相同的操作在论文中找到的数字 脚步。这意味着如果可以访问同一环境, 相同的软件,硬件和数据,人们将能够 得到相同的结果。相比之下,论文称为可复制 如果一个人只能遵循 本文的文字描述。因此,复制性更难 达到,而且是质量更好的指标 纸

您希望在按位相同的模型上获得训练结果。圣杯是写纸的方式是,只要人们只有纸,他们仍然可以确认你的结果。

还请注意,在许多重要论文中,实际上都无法复制结果:

  • 数据集通常不可用:JFT-300M
  • 大量使用计算能力:对于Google的一篇AutoML / Architecture Search论文,我问作者在其中一项实验中花费了多少GPU小时。当时,如果我想要那么多的GPU小时,那将花费我大约25万美元。

如果这是一个问题,很大程度上取决于具体情况。作为比较,请考虑CERN / LHC:不可能进行完全相同的实验。地球上只有极少数的机构拥有检查结果的工具。仍然不是问题。因此,请问您的顾问/已经在该期刊/会议上发表过论文的人。

实现可复制性

这太难了。我认为以下方法会有所帮助:

  • 确保您提到的质量指标没有太多数字
  • 由于训练可能取决于随机初始化,因此您可能还希望给出一个间隔而不是一个数字
  • 尝试较小的变化
  • 从头开始重新实现(也许使用另一个库?)
  • 请同事阅读您的论文,然后向您解释他们的想法。

获得精确的相同模型

在我看来,您已经做了重要的事情:

  • 设置所有种子:numpytensorflowrandom,...
  • 确保“训练与测试”分组一致
  • 确保按相同顺序加载训练数据

请注意,可能有些因素无法控制:

  • Bitflips :B。Schroeder,E。Pinheiro和W.-D。 Weber,“ Dram错误 野生:大规模的现场研究”
  • 固有的硬件/软件可再现性问题:正在浮动 点乘法不是关联的, GPU上的不同核心可能会在以下位置完成计算 不同的时间。因此,每次运行可能导致不同的结果 结果。 (如果有人可以在这里提供权威的参考,我会很高兴)