IGEV icon indicating copy to clipboard operation
IGEV copied to clipboard

训练自己的数据集出现Nan

Open zhangshaojie1993 opened this issue 1 year ago • 12 comments

每次在训练到接近8K iterations的时候都会出现loss为Nan的情况,数据集里有自己业务的数据。 nan

zhangshaojie1993 avatar Sep 06 '23 04:09 zhangshaojie1993

学习率太高了吗?导致梯度爆炸?

Yu-Cheung avatar Sep 07 '23 06:09 Yu-Cheung

学习率太高了吗?导致梯度爆炸? 用的作者默认的学习率

zhangshaojie1993 avatar Sep 07 '23 08:09 zhangshaojie1993

学习率太高了吗?导致梯度爆炸? 用的作者默认的学习率

那我不太懂了。我训练也出问题了,我准备重新训练的,目前联系作者联系不上,可能他太忙了。我训练的时候,loss是稳定上升,最后趋于收敛了,我也搞不懂原因 image

Yu-Cheung avatar Sep 07 '23 08:09 Yu-Cheung

scene2 @gangweiX 我只使用sceneflow数据集训练了一把,还是出现了nan,使用的是作者训练代码里的默认参数,能帮忙解答一下吗?

zhangshaojie1993 avatar Sep 08 '23 03:09 zhangshaojie1993

你好,你的问题可能有三种原因:

  1. 在不同设备上,seed即便相同初始化可能也会不同,可以尝试改一下seed;
  2. 半精度混合训练虽然提高了训练速度,但只有16bit,当数据过大时,容易发生溢出,出现nan,可以尝试关闭;(在train._stereo.py第206行,把mixed_precision的default参数删除,不要把default设置为False,参数判断的是有无字符串)
  3. 初始视差用的smooth_l1_loss监督,其余视差用的l1_loss监督,不同loss可能影响训练的稳定性,可以尝试都换成l1_loss。

另外,我建议可以直接加载sceneflow的预训练模型,然后在自己的数据集上训练,避免重新训练造成的不稳定。

Windsrain avatar Sep 09 '23 09:09 Windsrain

你好,你的问题可能有三种原因:

1. 在不同设备上,seed即便相同初始化可能也会不同,可以尝试改一下seed;

2. 半精度混合训练虽然提高了训练速度,但只有16bit,当数据过大时,容易发生溢出,出现nan,可以尝试关闭;(在train._stereo.py第206行,把mixed_precision的default参数删除,不要把default设置为False,参数判断的是有无字符串)

3. 初始视差用的smooth_l1_loss监督,其余视差用的l1_loss监督,不同loss可能影响训练的稳定性,可以尝试都换成l1_loss。

另外,我建议可以直接加载sceneflow的预训练模型,然后在自己的数据集上训练,避免重新训练造成的不稳定。

非常感谢!!我后来就是用的sceneflow预训练模型来训练的,并且学习率调成了之前的1/10,训练变稳定了!

zhangshaojie1993 avatar Sep 11 '23 10:09 zhangshaojie1993

你好,我在复现论文时发现训练过程中会出现nan,所以我在代码中添加以下代码(图中画圈的)想要查看跑到第几个epoch时会出现nan。然后,我发现在训练一开始就有参数的梯度是nan,请问这是正常的吗? image

1790426751 avatar Nov 02 '23 06:11 1790426751

这是不正常的,我们训练的时候没有出现NAN 2023-11-02 14:40:03>1790426751 写道:

你好,我在复现论文时发现训练过程中会出现nan,所以我在代码中添加以下代码(图中画圈的)想要查看跑到第几个epoch时会出现nan。然后,我发现在训练一开始就有参数的梯度是nan,请问这是正常的吗?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

gangweiX avatar Nov 02 '23 18:11 gangweiX

感谢您之前的回复,我还有一个小问题想要请教:就是关于训练参数--slow_fast_gru的设置,我看这个参数在前身RAFT-Stereo中说可以提高计算速度,但是在您的论文并没有提到这点,在代码中这参数也是默认为false的。请问这个参数我要设置为true还是保持默认就好?

1790426751 avatar Nov 03 '23 01:11 1790426751

我觉得看你的需求,如果你想快一点,可以设置一下2023-11-03 09:54:08>1790426751 写道:

感谢您之前的回复,我还有一个小问题想要请教:就是关于训练参数--slow_fast_gru的设置,我看这个参数在前身RAFT-Stereo中说可以提高计算速度,但是在您的论文并没有提到这点,在代码中这参数也是默认为false的。请问这个参数我要设置为true还是保持默认就好?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

gangweiX avatar Nov 03 '23 08:11 gangweiX

作者您好,我在sceneflow数据集上训练您的模型时,发现如果将lr设置为0.001,batchsize=2,然后跑到5k步左右的时候,3像素偏差会出现nan,我想咨询一下,如果batchsize设置只能是2的话,如果让网络可以快速下降,lr应该设置为多少呢

Luckyangle1232 avatar Nov 30 '23 11:11 Luckyangle1232

batchsize最好设置大一点,太小容易震荡容易出现nan,如果batchsize太小的话,试试梯度累计,将多个batch的loss求平均后再反向传播。或者把 core中的igev_stereo.py with autocast(enabled=self.args.mixed_precision): 改成enabled=False试试,我能想到的了,如果还不行,可能还是需要调整batchsize。2023-11-30 19:50:29>Wade_Lucky 写道:

作者您好,我在sceneflow数据集上训练您的模型时,发现如果将lr设置为0.001,batchsize=2,然后跑到5k步左右的时候,3像素偏差会出现nan,我想咨询一下,如果batchsize设置只能是2的话,如果让网络可以快速下降,lr应该设置为多少呢

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

gangweiX avatar Nov 30 '23 12:11 gangweiX