机器学习实践:TensorFlow最后一个epoch训练损失函数显著增大

问题

10个epoch,运行到最后一个时,训练数据集的损失函数显著增大
在这里插入图片描述

解决步骤

  1. 检查learning rate,发现学习率平滑减小,符合预期没有问题
  2. 检查梯度截断是否有效。梯度上没有问题。
  3. 检查adam之外的优化方法。adam没有问题
  4. 检查数据集是否shuffle。

结论

事实证明问题确实出在tensorflow的数据流水线上。如果把epoch的部分增加到这里,则整体是平滑的

def __call__(self, annotations_dir, batch_size=8, shuffle=False):
        self.data_reader = DataReader(annotations_dir)
        dataset = tf.data.Dataset.from_generator(self.data_reader.iter,
                                                 output_types=(tf.float32, tf.float32),
                                                 output_shapes=([self.img_size, self.img_size, 3], [None, 5]))  # for distribute data
        dataset = dataset.repeat(10)

如果是写到自己的训练循环里,则有问题

for epoch in range(10):
        for image_data, target in trainset:
            train_step(image_data, target)
        model.save_weights("../weights/yolov5")

其实,如果是经验丰富,大概一开头就可以猜出大概的解决方案,不用像我到处检测。因为问题出在一个新的epoch开头时突然异样。由于对tf.data原理了解的不多,问题的实质还需要更多实验和理论才能搞清楚了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YueTann

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值