在 Keras 中,如果 samples_per_epoch 小于生成器的"结束",当它(循环回自身)时,这会对结果产生负面影响吗?



我正在使用Keras和Theano来训练一个基本的逻辑回归模型。

假设我有一个100万个条目的训练集,对于我的系统来说,使用标准的model.fit()而不消耗内存太大了。

  • 我决定使用python生成器函数并使用model.fit_generator()拟合我的模型。
  • 我的生成器函数返回1M训练示例的批处理大小的块(它们来自一个DB表,所以我一次只提取足够的记录来满足每个批处理请求,保持内存使用检查)。
  • 它是一个无限循环的生成器,一旦它达到100万的末尾,它就循环并继续在set
  • 上运行

fit_generator()中有一个强制参数指定samples_per_epoch。文档显示

samples_per_epoch: integer,在进入下一个epoch之前要处理的采样数。

我假设fit_generator()不会在每次epoch运行时重置生成器,因此需要无限运行的生成器。

我通常将samples_per_epoch设置为生成器正在循环的训练集的大小。

但是,如果samples_per_epoch小于生成器正在使用的训练集的大小,并且nb_epoch> 1:

  • 你会得到奇怪的/不利的/意想不到的训练结果,因为似乎时代将有不同的训练样本集来适应?
  • 如果是这样,您是否以某种方式"快进"您的生成器?

我现在正在处理一些类似的事情。我想让我的周期更短,这样我就可以记录更多关于损失的信息,或者更频繁地调整我的学习率。

不深入代码,我认为.fit_generatorImageDataGenerator内置的keras生成的随机增强/洗牌数据一起工作的事实支持了您的怀疑,即它不会在每个epoch重置生成器。所以我相信你应该没问题,只要模型暴露在你的整个训练集上,如果其中一些是在一个单独的时代训练的,那就没关系了。

如果你仍然担心,你可以尝试编写一个生成器来随机采样你的训练集。

相关内容

  • 没有找到相关文章

最新更新