如何测量并记录Keras/TensorFlow下人工神经网络算法的总训练时长?
ANN训练总时长统计方案
可修改训练代码时的最优方案
直接在训练逻辑外层添加计时逻辑即可,不同框架的实现参考如下:
- TensorFlow/Keras 框架
可自定义回调实现,不需要改动原有训练逻辑:
import time from tensorflow.keras.callbacks import Callback class TotalTimeLogger(Callback): def on_train_begin(self, logs=None): self.train_start = time.time() def on_train_end(self, logs=None): total_cost = time.time() - self.train_start print(f"总训练耗时:{total_cost:.2f} 秒") # 训练时传入回调即可 model.fit(x_train, y_train, epochs=10, callbacks=[TotalTimeLogger()])
也可以直接在model.fit前后加时间戳打印,实现逻辑更简单。
- PyTorch 框架
直接在外层训练循环加时间统计:
import time start_time = time.time() # 原有训练循环 for epoch in range(epochs_num): for batch_data in train_loader: # 单步训练逻辑 pass total_cost = time.time() - start_time print(f"总训练耗时:{total_cost:.2f} 秒")
以上方案统计的时长最准确,包含了模型保存、校验、epoch间隙等所有额外开销。
仅能基于已有日志统计的方案
你给出的单步日志 7/7 [==============================] - 0s 2ms/step - loss: 0.2611 - accuracy: 0.9816已经包含了计算所需的核心字段:
- 单步平均耗时:日志中
2ms/step即为单步训练的耗时 - 单epoch总步数:日志开头
7/7的第二个数字即为单轮训练的总步数
统计逻辑如下:
- 统计所有训练轮次的总步数 = 训练epoch数 × 单epoch总步数
- 若有验证环节,同步提取验证日志中的验证总步数、单步验证耗时
- 总训练时长 = (训练总步数 × 单步训练耗时) + (验证总步数 × 单步验证耗时)
如果日志量较大,可以写简单脚本批量提取,用正则匹配r'- (\d+)s (\d+)ms/step'格式的字段,自动累加即可。该方法统计结果会有5%以内的误差,误差来自日志IO开销、训练间隙的闲置耗时,仅适合无法重跑训练的场景使用。
内容的提问来源于stack exchange,提问作者Steven Schmidt
相关产品推荐
相关产品推荐

