每次运行神经网络代码时结果都会发生变化
Posted
技术标签:
【中文标题】每次运行神经网络代码时结果都会发生变化【英文标题】:Result changes every time I run Neural Network code 【发布时间】:2020-02-03 01:37:19 【问题描述】:我通过运行此链接Neural Network – Predicting Values of Multiple Variables 中提供的代码得到了结果。我能够计算损失准确性等。 但是,每次运行此代码时,都会得到一个新结果。是否有可能获得相同(一致)的结果?
【问题讨论】:
【参考方案1】:代码到处都是random.randint()
!此外,权重大部分时间也是随机设置的,batch_size 对结果也有影响(虽然很小)。
-
Y_train、X_test、X_train 是随机生成的
使用
adam
作为优化器,意味着您将执行随机梯度下降。具有随机迭代的起点以便收敛。
batch_size 为 8 表示您将运行包含 8 个随机选定样本的批次。
解决方案:
-
在您的代码中设置随机种子以始终使用
np.random.seed()
生成的随机值
虽然有细微的偏差,但不会产生太大的问题
同 2。
如果我找到一种方法来为batch_size
/epoch
问题提供一致的采样方法,我将编辑我的答案。
【讨论】:
您好,感谢您的回复。首先,很抱歉我发布了参考代码并且没有提供完整的信息。实际上,我使用自己的非随机数据对参考代码进行了一些修改。X_train、y_train、X_test、y_test 都是从另一个来源生成的。尽管使用了我自己的数据,但每次我仍然得到不同的结果。 请仔细阅读我的内容,因为它与您放置其他评论的位置不同。 对不起!我正在尝试理解您的解释,但无法弄清楚..为了采用采样方法,我是否必须实现批量大小和时期数的不同组合? 问题是,batch_size 和 epochs 是使用随机采样技术制作的,这会影响整体性能。在这里您可以找到更多信息:***.com/questions/4752626/… 谢谢你的解释..和链接?【参考方案2】:里面有很多随机数组。每次使用np.random.seed()
获取相同的。例如:
np.random.seed(42)
for _ in range(3):
print(np.random.random(3))
每次运行此代码时,都会得到相同的结果。在我的机器上:
[0.37454012 0.95071431 0.73199394]
[0.59865848 0.15601864 0.15599452]
[0.05808361 0.86617615 0.60111501]
请注意,机器学习管道的许多其他部分也使用随机化。例如:
使用train_test_split()
拆分成训练、验证和测试数据集。
在神经网络中设置初始权重。
优化途径。
大多数 ML 函数都允许您将种子作为参数传递。看看文档。根据您正在做的事情以及您使用的库,您可能会也可能不会使整个管道可重现。
您可能还喜欢 this article 或 this one 关于使用 Keras 获得可重现的结果。
【讨论】:
您好,感谢您的回复。首先,很抱歉我发布了参考代码并且没有提供完整的信息。实际上,我使用自己的非随机数据对参考代码进行了一些修改。X_train、y_train、X_test、y_test 都是从另一个来源生成的。尽管使用了我自己的数据,但每次我仍然得到不同的结果。 @MitraLanka 好的,我更新了我的答案,使其更笼统。 感谢您提供链接。我已经使用了这些命令。现在,结果稳定 酷。不要忘记给你认为有用的东西点赞!以上是关于每次运行神经网络代码时结果都会发生变化的主要内容,如果未能解决你的问题,请参考以下文章
在 redshift 中重复连续运行后,除查询的结果发生变化