【问题标题】:PyTorch Lightning complex-valued CNN training outputs NaN after 1 batchPyTorch Lightning 复值 CNN 训练在 1 个批次后输出 NaN
【发布时间】:2022-01-21 14:30:20
【问题描述】:

我使用ComplexPyTorch 构建了一个复值 CNN,其中层被包裹在torch.ModuleList 中。运行网络时,我通过了验证完整性检查和 1 批训练,然后我的损失输出 NaN。在on_after_backward 中记录梯度会立即显示 NaN。有人对我如何解决此问题有任何建议吗?

我有一个实值版本的网络,我没有使用 ComplexPyTorch 并且一切正常,所以我不禁感到在网络的反向传递期间,我的层存在问题torch.ModuleList。另外,我在没有torch.ModuleList 的情况下对网络进行了硬编码,也没有遇到这个问题。

【问题讨论】:

    标签: python pytorch conv-neural-network nan pytorch-lightning


    【解决方案1】:

    对于任何感兴趣的人,我在Trainer 中设置了detect_anomaly=True,然后能够在反向传播期间跟踪输出NaN 的torch 函数。就我而言,它是torch.atan2,所以我在其分母上添加了一个很小的 ​​epsilon 并对其进行了修复,但总的来说,我一直发现分母 epsilon 对防止 NaN 划分函数非常有帮助!

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 1970-01-01
      • 2019-08-06
      • 2021-08-03
      • 2022-07-21
      • 2021-03-08
      • 2021-10-05
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多