笔记本与GPU服务器训练深度模型时训练步数显示不同问题咨询
现象原因说明
该现象是两个运行环境的Keras进度条显示逻辑差异导致,实际每轮梯度更新次数完全一致,因此最终训练结果几乎无差别,具体可分为两类常见场景:
- 进度条计数单位不同
本地笔记本的进度条按迭代步(单batch)计数,总步数为总样本数除以batch size向上取整的结果31561//32 + 1 = 987,和你的计算逻辑一致。
服务器端的进度条按已处理样本数计数,总计数上限直接取训练集总样本量31561,每完成1个batch进度条对应跳转32个单位,你观察到的1/31561、2/31561属于样本量级的显示计数,不代表真实迭代步。 - TensorFlow/Keras版本差异导致默认显示规则不同
不同版本的Keras对model.fit()的进度条默认输出规则有调整:- 2.3及以上正式版本的Keras默认按迭代步展示进度
- 部分早期版本、自定义编译的TensorFlow包,或传入训练集的格式为原生numpy数组而非
tf.data.Dataset对象时,会默认按样本数展示进度
你可以通过在model.fit()中显式指定steps_per_epoch=len(train_dataset)//32的方式固定迭代步,即可让两个环境的进度条显示逻辑统一。
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

