【问题标题】:Does calling keras "fit" multiple times shuffle training data in the same way?多次调用 keras“适合”是否以相同的方式洗牌训练数据?
【发布时间】:2019-04-16 22:19:15
【问题描述】:

我正在通过调用 keras fit 函数和 epochs=100, shuffle=True 来训练一些数据上的模型(使用 keras)。我想调用 fit 函数 10 次,并计算 10 次运行中每个 epoch 的平均验证准确度。

我希望对fit 的每次调用都以不同的顺序从训练数据开始,并通过不同的时期对数据进行不同的洗牌。这真的会发生吗?

(如果没有,调用fit 10 次是没有意义的,因为它每次都会训练相同顺序的数据。)

【问题讨论】:

  • 您的意思是要训练 10 个不同的模型还是训练相同的模型并在 10 个 epoch 后获得验证准确度?或者您正在寻找交叉验证?

标签: python machine-learning keras


【解决方案1】:

通常,要使用 keras 获得可重现的结果,您必须在每次实验之前设置相同的随机种子。假设你使用 tensorflow 后端:

from numpy.random import seed
seed(1234)
from tensorflow import set_random_seed
set_random_seed(5678)

如果您现在想要在实验之间不同随机行为,您可以明确设置不同的随机种子。关于 fit 函数中批量 shuffle 的随机性,每次设置不同的 numpy 随机种子应该就足够了,因为 keras 使用 np.random.shuffle() 进行洗牌。

【讨论】:

  • 如果我根本不设置随机种子,10 次运行中的洗牌行为是否相同?
  • 不,很可能不一样。在 numpy 文档中,他们声明:“如果种子为无,则 RandomState 将尝试从 /dev/urandom(或 Windows 类似物)中读取数据(如果可用),否则从时钟中读取种子”。这意味着它是根据时间变化的来源设置的。除非您没有在完全相同的时间开始实验,否则您可以放心地假设获得不同的随机数。
猜你喜欢
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 2018-10-10
  • 2017-06-27
  • 1970-01-01
相关资源
最近更新 更多