首页 > 解决方案 > 更大的批量减少训练时间

问题描述

我正在使用 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)

标签: pythonmachine-learningkerasconv-neural-network

解决方案


在这种情况下,更新权重的时间几乎不计算在内

你可以检查计算是否需要在内存和磁盘之间传输东西

使用 256 尺寸时

如果您想使用添加批量大小来减少时间,您可以设置并发任务!


推荐阅读