使用Keras DataGenerator训练时单epoch耗时过长问题求助
训练耗时过长的原因及解决方案
- 核心原因:未指定
steps_per_epoch和validation_steps参数
使用zip包装生成器后,Keras无法自动识别单个epoch的迭代次数,会无限循环读取生成器的数据,你看到的日志中1557/Unknown就是这个原因,实际迭代次数远超过数据集对应的合理步数。需要先计算训练集和验证集的总样本数,手动设置参数:# 读取生成器内置的样本总数 train_count = len(train_image_generator.filenames) val_count = len(validation_image_generator.filenames) history = model.fit(train_generator, epochs = EPOCHS, validation_data = val_generator, verbose=1, steps_per_epoch = train_count // BATCH_SIZE, validation_steps = val_count // BATCH_SIZE, callbacks=callbacks) - 数据加载IO瓶颈
ImageDataGenerator的所有数据加载、增强操作都在CPU执行,如果你是把数据集挂载在云盘读取,云盘的IO延迟会大幅拉长单步耗时。建议把数据集先解压到运行环境的本地临时磁盘,减少IO耗时。 - 未使用GPU加速
请确认运行时已经切换到GPU模式,用CPU跑语义分割任务本身就会比GPU慢数十倍以上。 - 冗余参数冲突
用生成器训练时,model.fit里的batch_size参数无效,批次大小由flow_from_directory中配置的BATCH_SIZE决定,多余的参数虽然不会导致严重变慢,但可以移除避免逻辑混淆。 - 第三方回调拖慢速度
WandbCallback默认会实时同步训练数据到远端,网络不佳时会增加单步耗时,你可以先注释该回调测试训练速度,确认是否是该因素导致。
内容的提问来源于stack exchange,提问作者tensored
相关产品推荐
相关产品推荐

