我们所爱之物昭示着我们究竟是谁。
最近再次写到了 yolo 训练回调函数的部分, 实践了on_train_batch_end的用法,一样的,我们需要把方法写好后,把回调函数注册到训练中
#初始化我们所需要的计数
_batch_count = 0
_batch_in_epoch = 0
'''
我们的逻辑是:获取一共多少个 epoch 每个 epoch 中有多少个 batch。
得到总数 (total_batches = trainer.epochs * nb)
随后只需要通过计算 已经训练过多少个 batch ( current_batch = trainer.epoch * nb + self._batch_in_epoch)
再除以总数 就可以得到以batch为单位的训练进度
'''
def on_train_batch_end(trainer):
nb = len(trainer.train_loader)
total_batches = trainer.epochs * nb
current_batch = trainer.epoch * nb + self._batch_in_epoch
progress = min((current_batch / total_batches) * 100, 100) if total_batches > 0 else 0
model.add_callback("on_train_batch_end", on_train_batch_end)
并非使用 epoch 不好,而是在长时间的训练中,一个 epoch 的时间可能长达十几分钟,这是让人难以忍受的:我的训练难道挂掉了吗?!!!
我知道我现在的用法非常的初级和低效,但是我希望在未来的学习中,可以逐步把:训练控制、指标监控、动态数据集这些功能一一实现。
