在我的PyTorch项目中,我稍微编辑了一下数据,现在我得到了loss.item()的nan。使用旧数据,它仍然在计算一个很大的损失。新数据
loss.item()
旧数据
谁能告诉我为什么会这样?
xfb7svmp1#
可能导致此问题的几个因素:1.学习速率太大。请尝试设定较小的学习速率,看看这样是否可以解决问题。1.您需要将输入到网络中的数据归一化。您可以尝试X = X - X.mean(axis=0)/X.std(axis=0),或者因为数据看起来像一个numpy数组,所以选择在转换为Tensor之前使用scikit-learn对其进行预处理。例如:最小最大缩放器11.尝试添加一个batchnorm层(例如:nn.BatchNorm1d)连接到您的网络,以进一步稳定层到层的输出。1.检查数据中的离群值(如果有非常大的值或nan值),并将其过滤掉。1.您可以通过设置torch.autograd.detect_anomaly(True)进行调试
X = X - X.mean(axis=0)/X.std(axis=0)
nn.BatchNorm1d
torch.autograd.detect_anomaly(True)
1条答案
按热度按时间xfb7svmp1#
可能导致此问题的几个因素:
1.学习速率太大。请尝试设定较小的学习速率,看看这样是否可以解决问题。
1.您需要将输入到网络中的数据归一化。您可以尝试
X = X - X.mean(axis=0)/X.std(axis=0)
,或者因为数据看起来像一个numpy数组,所以选择在转换为Tensor之前使用scikit-learn对其进行预处理。例如:最小最大缩放器11.尝试添加一个batchnorm层(例如:
nn.BatchNorm1d
)连接到您的网络,以进一步稳定层到层的输出。1.检查数据中的离群值(如果有非常大的值或nan值),并将其过滤掉。
1.您可以通过设置
torch.autograd.detect_anomaly(True)
进行调试