在Keras,如果samples_per_epoch小于' end'生成器(循环回自身)会对结果产生负面影响吗?

时间:2016-08-17 15:48:04

标签: python machine-learning deep-learning theano keras

我使用Keras与Theano一起训练基本的逻辑回归模型。

假设我已经获得了100万个条目的训练集,对于我的系统而言,它太大了,无法使用标准model.fit()而不会消耗内存。

  • 我决定使用python生成器函数并使用model.fit_generator()拟合我的模型。
  • 我的生成器函数返回1M训练样例的批量大小的块(它们来自数据库表,因此我一次只能提取足够的记录来满足每个批处理请求,从而保持内存使用情况)。
  • 它是一个无休止的循环生成器,一旦达到100万的末尾,它就会循环并继续在集合上

fit_generator()中有一个强制性参数来指定samples_per_epoch。文件表明

  

samples_per_epoch:整数,在进入下一个纪元之前要处理的样本数。

我假设fit_generator()每次运行一个纪元时都不会重置发生器,因此需要一个无限运行的发生器。

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

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

  • 你会得到奇怪的/不利的/意外的训练,因为看起来这个时代会有不同的训练样例适合吗?
  • 如果是这样,你是否能够快速前进'你发电机不知何故?

1 个答案:

答案 0 :(得分:3)

我现在正在处理类似的事情。我想让我的时代更短,所以我可以记录更多关于损失的信息或更频繁地调整我的学习率。

不考虑代码,我认为.fit_generator与keras内置ImageDataGenerator生成的随机扩充/混洗数据一起工作的事实支持您怀疑它不会重置生成器每个时代。所以我相信你应该没问题,只要模型暴露在你的整个训练集中,如果其中一些训练是在一个单独的时代内进行训练就不重要了。

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