Tu *_*Bui 7 machine-learning neural-network keras
我手动构建了一个数据生成器,产生[input, target]
每个调用的元组.我将我的发生器设置为每个时期对训练样本进行洗牌.然后我fit_generator
用来调用我的generator
,但是在这个函数的"shuffle"参数中混淆:
fit_generator(self, generator, steps_per_epoch=None, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_queue_size=10, workers=1, use_multiprocessing=False, shuffle=True, initial_epoch=0)
Run Code Online (Sandbox Code Playgroud)
来自Keras API:
shuffle:是否在每个时代开始时改组批次的顺序.仅用于Sequence的实例(keras.utils.Sequence)
我认为"洗牌"应该是工作的generator
.当我的自定义generator
决定在每次迭代中输出哪个批次时,它如何改变批次的顺序?
正如您引用的文档所述,shuffle参数仅与实现keras.utils.Sequence的生成器相关.
如果您使用的是"简单的"发生器(如keras.preprocessing.image.ImageDataGenerator,或自己的自定义非序列发生器),比发生器实现返回单个批次(使用收益率的方法-你可以了解更多有关它在这个问题).因此,只有生成器本身控制返回的批处理.
引入了keras.utils.Sequence以支持多处理:
序列是一种更安全的多处理方式.这种结构保证了网络每个时期每个样本只训练一次,而发电机不是这种情况.
为此,你需要实现由一批指数(它允许多个工人同步)返回一个批次的方法:__getitem__(self, idx)
.如果启用shuffle参数,__getitem__
则将使用随机顺序的索引调用该方法.
但是,您也可以将其设置为false,并通过实现该on_epoch_end
方法来自我洗牌.
归档时间: |
|
查看次数: |
5451 次 |
最近记录: |