每次我 运行 神经网络代码时结果都会改变
Result changes every time I run Neural Network code
我通过 运行 中提供的代码得到了结果 link 。我能够计算损失准确性等。
但是,每次我 运行 这段代码,我都会得到一个新的结果。是否有可能获得相同(一致)的结果?
里面有很多随机数组。使用 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 or this one 关于使用 Keras 获得可重现的结果。
代码到处都是random.randint()
!此外,权重大部分时间也是随机设置的,batch_size 也会对结果产生影响(尽管很小)。
- Y_train、X_test、X_train随机生成
- 使用
adam
作为优化器,意味着您将执行随机梯度下降。用一个随机的迭代起点来收敛。
- A batch_size of 8 意味着您将 运行 批次由 8 个 随机 选定的样本组成。
解决方案:
- 在您的代码中设置一个随机种子,以始终使用
np.random.seed()
生成的随机值
- 虽然有一些小偏差,但不会产生太大问题
- 同 2.
如果我找到一种方法使 batch_size
/epoch
问题的抽样方法一致,我将编辑我的答案。
我通过 运行 中提供的代码得到了结果 link
里面有很多随机数组。使用 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 or this one 关于使用 Keras 获得可重现的结果。
代码到处都是random.randint()
!此外,权重大部分时间也是随机设置的,batch_size 也会对结果产生影响(尽管很小)。
- Y_train、X_test、X_train随机生成
- 使用
adam
作为优化器,意味着您将执行随机梯度下降。用一个随机的迭代起点来收敛。 - A batch_size of 8 意味着您将 运行 批次由 8 个 随机 选定的样本组成。
解决方案:
- 在您的代码中设置一个随机种子,以始终使用
np.random.seed()
生成的随机值
- 虽然有一些小偏差,但不会产生太大问题
- 同 2.
如果我找到一种方法使 batch_size
/epoch
问题的抽样方法一致,我将编辑我的答案。