loss_func = nn.MSELoss()
loss = loss_func(val, target)
最近在跑一个项目,计算loss
时用了很普通的MSE
,在训练了10到300个batch时,会出现loss tensor([[nan nan nan nan]]
类似的情况。对这个异常的loss
进行梯度下降,会导致net
的输出变为nan
。在网上查了解决方案,都不好用:
- 学习率过大;
loss
过小(或者说除以了0 / 计算了log(0)
);- 存在脏数据输入
NaN
。
试过上述方法,却同样无效的小伙伴可以考虑:
- 自己手写
loss function
,在临界值处改为线性函数,知乎链接: