Pytorch:测试损失在经过一些迭代后变为 nan

Lp8*_*194 7 deep-learning pytorch

我正在尝试训练深度学习架构,模型训练得非常完美。我在每个纪元后进行测试。对于 7 epoch,所有损失和准确性似乎都不错,但在测试期间的 8 epoch,测试损失变为 nan。我检查了我的数据,没有nan。而且我的测试准确度比火车高,这很奇怪。训练数据大小为 37646,测试数据大小为 18932,所以应该足够了。在成为 nan 测试之前,开始变得非常高,约为 1.6513713663602217e+30。这真的很奇怪,我不明白为什么会发生。非常感谢任何帮助或建议。

Ale*_*sai 7

假设非常高的学习率不是问题的原因,您可以在更新之前使用 PyTorch 的gradient clipping.

例子:

optimizer.zero_grad()        
loss, hidden = model(data, hidden, targets)
loss.backward()

torch.nn.utils.clip_grad_norm_(model.parameters(), clip_value)
optimizer.step()
Run Code Online (Sandbox Code Playgroud)

这是当你有 NaN 损失时要做的第一件事,当然,如果你已经确定你在其他地方没有 NaN,例如在你的输入特征中。在增加学习率导致 NaN 的情况下,我使用了梯度裁剪,但仍然想测试更高的学习率。降低学习率也可以解决你的问题,但我猜你已经尝试过这个。

根据经验,我设置了clip_value = 5大部分时间,然后查看其对性能的影响(通常不显着)。请随意尝试不同的值。