PyTorch Lightning复合体在1批后评估CNN训练输出NaN



我使用ComplexPyOrch构建了一个复值CNN,其中层被包裹在torch.ModuleList中。当运行网络时,我通过了验证健全性检查和一批培训,然后我的损失输出NaN。on_after_backward中的测井梯度立即显示NaN。有人对我如何解决这个问题有什么建议吗?

我有一个真正有价值的网络版本,我没有使用ComplexPyTorch,一切都很好,所以我忍不住觉得在网络的反向传输过程中,我的层在torch.ModuleList中出现了问题。此外,我在没有torch.ModuleList的情况下对网络进行了硬编码,也没有遇到这个问题。

对于任何感兴趣的人,我在Trainer中设置了detect_anomaly=True,然后能够在反向传播期间跟踪输出NaNs的torch函数。在我的例子中,它是torch.atan2,所以我在它的分母上加了一个小ε并固定了它,但作为一个一般点,我总是发现分母ε在防止NaN划分函数方面非常有用!

相关内容

  • 没有找到相关文章

最新更新