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

时间:2019-10-04 17:45:52

标签: python-3.x tensorflow neural-network conv-neural-network recurrent-neural-network

通过运行此链接Neural Network – Predicting Values of Multiple Variables中提供的代码,我得到了结果。我能够计算损失的准确性等。 但是,每次运行此代码时,都会得到一个新结果。是否有可能获得相同(一致)的结果?

2 个答案:

答案 0 :(得分:1)

那里有很多随机数组。每次使用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 articlethis one,希望通过Keras获得可重复的结果。

答案 1 :(得分:1)

到处都有random.randint()的代码!此外,权重在大多数情况下也是随机设置的,并且batch_size对结果也有影响(尽管影响很小)。

  1. Y_train,X_test,X_train是随机生成的
  2. 使用adam作为优化程序,意味着您将执行随机梯度下降。以随机为起点进行迭代,以收敛。
  3. batch_size为8表示您将运行由8个随机选定样本组成的批次。

解决方案:

  1. 在代码中设置随机种子,以始终具有使用np.random.seed()生成的随机值
  2. 尽管有很小的偏差,但不会产生太大的问题
  3. 与2相同。

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