【问题标题】:Same Python code, same data, different results on different machines相同的 Python 代码,相同的数据,不同机器上的不同结果
【发布时间】:2016-11-08 17:54:17
【问题描述】:

我有一个很奇怪的问题,我在不同的机器上使用相同的代码和相同的数据得到不同的结果。

我有一个基于numpy/scipy/sklearn 的python 代码,我使用anaconda 作为我的基本python 发行版。即使我将整个项目目录(包括所有数据和代码)从我的主机复制到另一台机器并运行它,我得到的结果也是不同的。具体来说,我正在做一个分类任务,我得到了 3% 的准确度差异。我在两台机器上使用相同版本的 python 和 anaconda。我的主机是 ubuntu 16.04,它的结果低于我尝试过的具有各种操作系统的其他几台机器(OSX、ubuntu 14.04 和 Centos)。所以,我当前的系统配置应该有问题,因为所有其他机器显示一致的结果。由于我的 anaconda 版本在所有机器中都是一致的,我不知道还有什么问题。有什么想法我还应该检查什么或问题的根源是什么?

我还从头开始删除并重新安装了 anaconda,但没有帮助。

【问题讨论】:

  • 您使用的是训练/测试拆分吗?如果是这样,可能是由于提取了不同的样本。
  • 我为此使用了随机种子。此外,我每次运行时都不会得到不同的结果,我只在其中一台机器上得到不同的结果。所以,我想这一定是由于系统配置。但不确定要检查什么。
  • 如果不看代码(最好是一些有代表性的示例数据),很难确定。无论操作系统如何,相同的代码/数据/库应该产生相同的结果。可能存在包版本差异,即版本之间的某些内容发生了变化?
  • 所有机器都是相同的位架构(例如64位)吗?
  • 也许 Numpy 的一个版本与数学内核库链接,而一个不是?只是想添加一个数据点。

标签: python numpy scipy scikit-learn anaconda


【解决方案1】:

如果您的代码使用线性代数,请检查一下。一般来说,舍入误差不是确定性的,如果你的矩阵条件不好,可能就是这样。

【讨论】:

  • 你能详细说明条件差的矩阵吗?
  • 我要补充一点,在调试这类问题时,我会尝试进行二进制搜索,比较中间结果,以找到算法中事情开始不同的地方。祝你好运!
【解决方案2】:

我遇到了类似的问题,我找到了this discussion。问题可能是 MKL(英特尔数学内核库)浮点运算默认情况下是非确定性的。所以export MKL_CBWR=AUTO可以解决问题。

【讨论】:

  • 嗨,dim,我该如何设置 MKL_CBWR?
  • linux也可以设置?
  • @LucaMonno,是的,您可以在 Linux 上像使用 export~/.bash_profile 一样设置任何其他环境变量
猜你喜欢
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多