一次解决Pytorch训练时损失和参数出现Nan或者inf的经历

目前在做实验,参考了一个新的网络架构之后发现训练时损失出现Nan,参数了出现了inf的情况,先说说我的排查经历。

首先肯定是打印损失,损失是最容易出现Nan的,有各种原因,网上也有很多解决办法,我这里就不一一赘述了,大伙打开CSDN就一搜就有很多很全的

我的问题是在训练的中间参数中出现了inf,导致最终的损失为NaN或者inf

用下面的代码判断参数是否出现了NaN或者inf

python 复制代码
for i in range(5):   # exam是一个参数列表
    if torch.isnan(exeam[i]).any(): print('下表为{}的元素存在NaN!'.format(i))
    if torch.isinf(exeam[i]).any(): print('下表为{}的元素存在inf!'.format(i))

确定是哪些为NaN之后,直接上Relu或者归一化,很可惜,没用。。。

我参考的文章是这两篇

Vision Transformers for Single Image Dehazing

MixDehazeNet : Mix Structure Block For Image Dehazing Network
这两篇文章中都用到了soft reconstruction。现在我还搞不明白这东西是啥
模仿论文MixDehazeNet的代码,将生成的参数按照下面的代码计算下

python 复制代码
# feat是网络输出的结果,10通道
K, atp, tran, B = torch.split(feat, (1, 3, 3, 3), dim=1)

# x是网络的输入
atp = K * atp - atp + x
tran = K * tran - tran + x
x = K * x - B + x
# H, W是限定的尺寸
rgb = x[:, :, :H, :W]
atp = atp[:, :, :H, :W]
tran = tran[:, :, :H, :W]

这样一弄,问题就解决了

我分析了下原因,代码中的参数出现NaN是因为出现了除以0的情况,加上了soft reconstruction之后(类似于全局残差,关键是后面加上x的那个操作)是原先为0的参数变得不为0了,除以0的情况消失了,就不存在NaN啦。

我是做视觉方向的,全局残差机制(ResNet,FFA-Net)在视觉中可谓是有百利而无一害,所以这样加应该没问题的

疑问
soft reconstruction究竟是什么东西呢?网上的资料甚少,chatGPT也没有给出完全的定义。
还请知道的大佬不吝赐教。

相关推荐
LDG_AGI9 小时前
【推荐系统】深度学习训练框架(十):PyTorch Dataset—PyTorch数据基石
人工智能·pytorch·分布式·python·深度学习·机器学习
长桥夜波9 小时前
机器学习日报23
人工智能·机器学习
roman_日积跬步-终至千里9 小时前
【模式识别与机器学习(9)】数据预处理-第一部分:数据基础认知
人工智能·机器学习
AI人工智能+10 小时前
表格识别技术:完整还原银行对账单表格结构、逻辑关系及视觉布局,大幅提升使处理速度提升
人工智能·深度学习·ocr·表格识别
胡乱编胡乱赢10 小时前
Decaf攻击:联邦学习中的数据分布分解攻击
人工智能·深度学习·机器学习·联邦学习·decaf攻击
远上寒山10 小时前
DINO 系列(v1/v2/v3)之二:DINOv2 原理的详细介绍
人工智能·深度学习·自监督·dinov2·自蒸馏·dino系列
_codemonster10 小时前
深度学习实战(基于pytroch)系列(四十)长短期记忆(LSTM)从零开始实现
人工智能·深度学习·lstm
青云交10 小时前
Java 大视界 -- Java 大数据机器学习模型在自然语言处理中的跨语言信息检索与知识融合
机器学习·自然语言处理·java 大数据·知识融合·跨语言信息检索·多语言知识图谱·低资源语言处理
_Twink1e10 小时前
【HCIA-AIV4.0】2025题库+解析(二)
人工智能·深度学习·机器学习
铅笔侠_小龙虾11 小时前
深度学习理论推导--多元线性回归
人工智能·深度学习·机器学习