【问题标题】:Bigger batch size reduce training time更大的批量减少训练时间
【发布时间】: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


    【解决方案1】:

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

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

    当使用 256 尺寸时

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

    【讨论】:

    • 您好,感谢您的帮助!对不起,我真的不明白你的意思:/。你能详细说明你的答案吗?
    • 只是因为256大小的图片内存不足,所以电脑在内存和磁盘之间传输东西
    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多