首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Keras中,如果samples_per_epoch小于生成器的“end”,当它(循环返回自身)时,这会对结果产生负面影响吗?

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

Stack Overflow用户
提问于 2016-08-17 15:48:03
回答 1查看 2K关注 0票数 4

我用Keras和Theano来训练一个基本的logistic回归模型。

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

  • 我决定使用python生成器函数,并使用model.fit_generator()来拟合我的模型。
  • 我的生成器函数返回1M训练示例的批处理大小的块(它们来自DB表,因此我一次只提取足够的记录来满足每个批处理请求,从而控制内存的使用)。
  • 它是一个没完没了的循环生成器,一旦到达100万的末尾,它就会循环并在集合上继续运行。

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

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

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

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

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

  • 你会不会得到奇怪的/不利的/意外的训练,因为似乎时代会有不同的集合训练例子适合?
  • 如果是的话,你会“快进”你的发电机吗?
EN

回答 1

Stack Overflow用户

发布于 2016-08-23 05:53:41

我现在正在处理一些类似的事情。我想缩短我的时代,这样我就可以记录更多关于损失的信息,或者更经常地调整我的学习速度。

在不深入研究代码的情况下,我认为.fit_generator使用由keras内置的ImageDataGenerator生成的随机增强/改组数据这一事实支持了您的怀疑,即它没有根据时代重置生成器。所以我认为你应该很好,只要你的模型暴露在你的整套训练中,如果其中一些是在一个单独的时代里训练的话,那就不重要了。

如果你仍然担心,你可以尝试写一个发电机,随机取样你的训练集。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39001104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档