当前位置: 首页 > news >正文

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

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

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

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

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

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的代码,将生成的参数按照下面的代码计算下
# 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也没有给出完全的定义。
还请知道的大佬不吝赐教。
http://www.lryc.cn/news/182162.html

相关文章:

  • 【python入门篇】列表简介及操作(2)
  • 数据结构与算法——19.红黑树
  • js题解(三)
  • CompletableFuture异步回调
  • Python中匹配模糊的字符串
  • PHP图片文件管理功能系统源码
  • (枚举 + 树上倍增)Codeforces Round 900 (Div. 3) G
  • websocket逆向【python实现websocket拦截】
  • 软件测试自动化的成本效益分析
  • 【Java】状态修饰符 final static
  • 笔试编程ACM模式JS(V8)、JS(Node)框架、输入输出初始化处理、常用方法、技巧
  • learn掩码张量
  • 激活函数介绍
  • docker方式启动一个java项目-Nginx本地有代码,并配置反向代理
  • 前端和后端是Web开发选哪个好?
  • HTTP协议,请求响应
  • idea配置文件属性提示消息解决方案
  • EdgeView 4 for Mac:重新定义您的图像查看体验
  • 流程自动化(RPA)的好处有哪些?
  • 医学影像系统【简称PACS】源码
  • 大家都在用哪些敏捷开发项目管理软件?
  • python机器学习基础教程01-环境搭建
  • TinyWebServer学习笔记-Config
  • 数据结构与算法--算法
  • JVM:如何通俗的理解并发的可达性分析
  • 传统机器学习聚类算法——总集篇
  • Ajax
  • SQL_ERROR_INFO: “Duplicate entry ‘9003‘ for key ‘examination_info.exam_id‘“
  • 解决每次重启ganache虚拟环境,十个账号秘钥都会改变问题
  • sheng的学习笔记-【中文】【吴恩达课后测验】Course 2 - 改善深层神经网络 - 第一周测验