【发布时间】:2019-10-08 18:12:45
【问题描述】:
我正在使用 CNN 进行图像分类;我用 keras ImageDataGenerator 做数据增强
我想我错过了什么。
A /// train =model.fit_generator(image_gen.flow(train_X, train_label, batch_size=64),epochs=100,verbose=1,validation_data=(valid_X, valid_label),class_weight=class_weights,callbacks=[metrics],steps_per_epoch=len(train_X)/64) # 1 epoch =20 secondes
B /// train =model.fit_generator(image_gen.flow(train_X, train_label, batch_size=15),epochs=100,verbose=1,validation_data=(valid_X, valid_label),class_weight=class_weights,callbacks=[metrics],steps_per_epoch=len(train_X)/15) # 1 epoch = 60 secondes
C /// train =model.fit_generator(image_gen.flow(train_X, train_label, batch_size=256),epochs=100,verbose=1,validation_data=(valid_X, valid_label),class_weight=class_weights,callbacks=[metrics],steps_per_epoch=len(train_X)/256) # 1 epoch =345secondes
在情况 A 中,我使用 64 的批量大小,每个 epoch 需要 20 秒。批量大小为 15 的情况 B 我需要每个 epoch 60 秒。批量大小为 256 的情况 C 每个 epoch 需要 345 秒。
我的理解:
-batch size = 图片数量 用于权重更新。如果我有 100 张图像,批量大小为 10,则权重将在每个时期更新 10 次。我说的对吗?
Steps_per_epoch 是 Keras DataAugmenteur 生成的图像数量。由于我分配了值长度(Train_X)/batch_size,这应该意味着,batch_size 数据在权重更新之前使用。我说的对吗?
如果我的两个肯定是真的,这应该意味着减少批量大小会增加 1 个 epoch 的时间,因为会有更多的权重更新。
为什么当我使用 64 的批量大小时,我的纪元时间较短?为什么在使用 batch size=256 时我的 epoch 时间很大?
如果您知道更多信息或重新表述,请告诉我
编辑:我不明白为什么,但是当我设置批量大小 =256 时,我每个时期的总步数(样本批次)为 256,而它应该是 len(Train_X)/256 (=58)
【问题讨论】:
标签: python machine-learning keras conv-neural-network