python - 更大的批量减少训练时间
问题描述
我正在使用 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
在 AI 使用 64 的批量大小的情况下,我每个 epoch 需要 20 秒。批量大小为 15 的情况 B 我需要每个 epoch 60 秒。批量大小为 256 的情况 C 每个时期需要 345 秒。
我的理解:
-批量大小 =用于权重更新的图像数量。如果我有 100 张图像,批量大小为 10,则权重将在每个时期更新 10 次。我对吗?
Steps_per_epoch是 Keras DataAugmenteur 生成的图像数量。由于我分配了值长度(Train_X)/batch_size,这应该意味着,batch_size数据在权重更新之前使用。我对吗?
如果我的两个肯定是真的,这应该意味着减少批量大小将增加 1 个 epoch 的时间,因为会有更多的权重更新。
为什么当我使用 64 的批量大小时,我的较低纪元时间?为什么我在使用批量大小 = 256 时得到了很大的纪元时间?
如果您知道更多信息或重新制定,请告诉我
编辑:我不明白为什么,但是当我设置批量大小 = 256 时,当它应该是 len(Train_X)/256 (=58)
解决方案
在这种情况下,更新权重的时间几乎不计算在内
你可以检查计算是否需要在内存和磁盘之间传输东西
使用 256 尺寸时
如果您想使用添加批量大小来减少时间,您可以设置并发任务!
推荐阅读
- android - 将序列化对象传递给片段
- r - R - 事后卡方 - 不再支持“fifer”包?
- javascript - 为什么浏览器会区分带有 www 或不带 www 的 URL?
- c# - 如何在文本C#中用超链接/锚标记替换带有括号的url
- image - TensorFlow、Keras:测试图像大于训练图像
- laravel - 无法在项目根目录中运行 composer 命令
- python-3.x - 我可以在不调用蜘蛛的情况下使用 Scrapy 吗?
- javascript - 使用 flatMap 订阅 onComplete 永远不会完成
- eclipse - 如何在 Eclipse 4.2 中安装 Perforce 插件
- ruby-on-rails - Rails 操作视图表单助手“f.email_field”未显示与同一页面上的其他助手相同的格式