nnet() 在不同的操作系统中有不同的结果(Windows 与 Linux)

nnet() different results in different operating systems (Windows vs Linux)

提问人:N Anderson 提问时间:2/20/2023 最后编辑:PhilN Anderson 更新时间:2/21/2023 访问量:35

问:

我正在使用 nnet() 包专门用于 ANN 模型的 R 脚本。我在本地计算机 (Windows) 上运行脚本,我的同事在他的计算机 (Docker -> Linux) 上运行相同的 R 脚本。对于ANN模型,我们得到了相似但不同的结果。神经元权重存在很大差异,拟合值和预测值略有差异。

我们在 nnet() 函数之前设置了相同的种子,因此我们在同一个随机化集上。此外,我已将模型的所有系数、偏差等的初始化权重 (“Wts”) 设置为相同的值 (1)。我还通过设置种子和执行随机 sample() 来测试两个系统的随机化,该样本返回相同的结果。

我还测试了我们的模型输入(光谱),一切都是 1:1 的统一。

我们构建了许多模型,包括PLS,GPR和SVR(带有网格搜索参数),并且我们总是得到相同的结果。这些模型不利用随机化,因此假设 ANN 模型中的随机化是造成差异的原因。

我们还将 R 更新到最新版本 (4.2.2),并更新了所有包,包括 nnet() 和来自同一存储库的依赖项。

我不知从何而来,我最后的想法是操作系统(我=Windows,他=Linux)之间的区别。是否还有其他可能影响 nnet() 函数的差异,例如舍入(因为模型输入变量为小数点后大小)或操作系统之间的排序差异?

期望在 ANN 模型(权重、拟合值和预测)之间具有完全的统一性。

抱歉没有可重现的代码,这些模型适用于高维数据(光谱> 1000 个变量,n > 1000)。我可以分享我们的 nnet() 函数代码:

  cv_wts <- rep(1,cv_wts_n)
  
  set.seed(seed)
  cal <- nnet(TV ~ NIR, data = training_dat, size = n, decay = d, Wts = cv_wts,
              linout=TRUE, maxit = 1000000, MaxNWts = 1000000, trace = FALSE)
R Linux 随机 舍入 NNET

评论

1赞 Ben Bolker 2/21/2023
比较 stackoverflow.com/questions/75431116/...
0赞 N Anderson 2/22/2023
@BenBolker,我们已经测试了这个问题中的示例代码,并收到了相同的结果: B0 B1 B2 B3 3.097283E+01 1.831543E-03 1.047613E+00 1.842448E+02 在 Windows 和 Linux 上

答: 暂无答案