每次我 运行 神经网络代码时结果都会改变

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 也会对结果产生影响(尽管很小)。

  1. Y_train、X_test、X_train随机生成
  2. 使用 adam 作为优化器,意味着您将执行随机梯度下降。用一个随机的迭代起点来收敛。
  3. A batch_size of 8 意味着您将 运行 批次由 8 个 随机 选定的样本组成。

解决方案:

  1. 在您的代码中设置一个随机种子,以始终使用 np.random.seed()
  2. 生成的随机值
  3. 虽然有一些小偏差,但不会产生太大问题
  4. 同 2.

如果我找到一种方法使 batch_size/epoch 问题的抽样方法一致,我将编辑我的答案。