唐山做网站多少钱,代加工订单,网站怎么做地图导航,柳州网站建设排行榜记录一个非常坑爹的bug:loss回传导致神经网络中一个linear层的权重参数变为nan 1.首先loss值是正常数值#xff1b; 2.查了好多网上的解决办法#xff1a;检查原始输入神经网络数据有没有nan值#xff0c;初始化权重参数#xff0c;使用relu激活函数#xff0c;梯度裁剪 2.查了好多网上的解决办法检查原始输入神经网络数据有没有nan值初始化权重参数使用relu激活函数梯度裁剪降低优化器的学习率等等都没解决个人认为这些应该影响不大一般不会出问题 3.最后是使用如下异常检测检测在loss回传过程中哪一块出现了问题 torch.autograd.set_detect_anomaly(True) with torch.autograd.detect_anomaly(): loss.backward() 4.果真报了一个错 RuntimeError: Function ‘ExpBackward’ returned nan values in its 0th output. 意思是Exp函数回传有问题然后发现在生成loss过程中有一步 tensor2 torch.exp(tensor1),tensor1是我要处理的张量tensor2用来做后续处理这里tensor1中的值如果太小容易使torch.exp的结果变为0。虽然exp函数的值域是大于0的但是对于非常小的输入pytorch处理后会取0所以做了如下处理 torch.clamp(tensor2,1e-9),对tensor2中小于1e-9的数直接取1e-9避免0值出现 5.还有一个点是计算loss时有一个torch.log(tensor3)的函数同样的道理不能让tensor3的值中有0否则loss会出现inf值同样可以加一个很小的值比如1e-9 6.最后不确定的一点是pytorch的版本问题出现问题的是torch1.0.1更新到1.5.1之后不再报错这也是在https://discuss.pytorch.org/找到的方法。 7.这个问题找了好长时间又是输出loss值又是输出过程中的各种变量值还有神经网络权重参数最后按照上面的措置一步一步才解决最重要的是要保证每个函数的输入要正常但是不确定是不是torch版本问题反正手段都用上了。