yolov5配置错误记录

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

 这里是直接没有找到数据集说明是路径错误。经过设置yaml后

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../autodl-tmp/datasets/neu  # dataset root dir
train: train/images  # train images (relative to 'path') 118287 images
val: val/images  # val images (relative to 'path') 5000 images
test: test/images  # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794

# Classes
nc: 6
names:
  0: crazing
  1: inclusion
  2: patches
  3: pitted_surface
  4: rolled-in_scale
  5: scratches

出现了新的错误。

 这里显示找不到标签就非常困惑然后开始了一些无用 的尝试以为是数据集的问题甚至想换个数据集但是还是再尝试了一下把数据集放在yolov5下面以及看train.py等配置文件都没有很好的办法然后就开始查划分的数据集train下的labels和images 是不是一一对应的发现是对应的不知道咋办再然后发现train下的labels文件夹我命名出错了我打成了lables.改正后跑了起来。

 但是又遇到了数据为0 的情况。

 runs下面生成的exp文件里面都是空的。没有数据。

一开始是想法是根本没有动这个yolov5的代码这个问题一般是在损失函数方面的就很困惑于是只能根据报错去查。

然后根据上面的报错FutureWarning: Non-finite norm encountered in torch.nn.utils.clip_grad_norm_; continuing anyway. 进行了查找。

这是来自PyTorch深度学习框架的警告消息。这个警告表示在使用torch.nn.utils.clip_grad_norm_()函数时出现了非有限值(norm)。在深度学习中这个函数通常用于梯度裁剪(gradient clipping)以避免梯度爆炸(gradient explosion)问题。当计算梯度的范数(norm)为无穷大或非数值值时就会触发这个警告。通常这个问题是由梯度中存在的NaN或Inf值引起的可以通过检查模型代码中的数据输入和处理过程来解决这个问题。此外也可以尝试减小学习率或减小模型的复杂度来避免梯度爆炸问题。

然后就怀疑是数据的问题因为Non-finite norm encountered这个就是指遇到非有限范数也就是越界了。一查果然如此

1.脏数据训练数据(包括label)中有无异常值(nan, inf等)。
2.除0问题。这里实际上有两种可能一种是被除数的值是无穷大即 Nan另一种就是0作为了除数分母可以加一个eps=1e-8。之前产生的 Nan 或者0有可能会被传递下去造成后面都是 Nan。请先检查一下神经网络中有可能会有除法的地方例 softmax 层再认真的检查一下数据。可以尝试加一些日志把神经网络的中间结果输出出来看看哪一步开始出现 Nan 。
3.可能0或者负数作为自然对数或者 网络中有无开根号(torch.sqrt), 保证根号下>=0
4.初始参数值过大也有可能出现 Nan 问题。输入和输出的值最好也做一下归一化。
5.学习率设置过大初始学习率过大也有可能造成这个问题。如果在迭代的100轮以内出现NaN一般情况下的原因是因为你的学习率过高需要降低学习率。可以不断降低学习率直至不出现NaN为止一般来说低于现有学习率1-10倍即可。如果为了排除是不是学习率的原因可以直接把学习率设置为0然后观察loss是否出现Nan如果还是出现就不是学习率的原因。需要注意的是即使使用 adam 之类的自适应学习率算法进行训练也有可能遇到学习率过大问题而这类算法一般也有一个学习率的超参可以把这个参数改的小一些。
6.梯度过大造成更新后的值为 Nan 。如果当前的网络是类似于RNN的循环神经网络的话在序列比较长的时候很容易出现梯度爆炸的问题进而导致出现NaN一个有效的方式是增加“gradient clipping”梯度截断来解决对梯度做梯度裁剪限制最大梯度
7.需要计算loss的数组越界尤其是自定义了一个新的网络可能出现这种情况
8.在某些涉及指数计算可能最后算得值为 INF无穷比如不做其他处理的softmax中分子分母需要计算expx值过大最后可能为INF/INF得到NaN此时你要确认你使用的softmax中在计算expx做了相关处理比如减去最大值等等
 

然后就开始逐项排查。暂时还未解决解决方案将放在下篇文章中。

参考文章

Pytorch训练模型损失Loss为Nan或者无穷大INF原因_loss为inf_ytusdc的博客-CSDN博客

Pytorch计算Loss值为Nan的一种情况【exp计算溢出利用softmax计算的冗余性解决】_futurewarning: non-finite norm encountered in torc_PuJiang-的博客-CSDN博客

Pytorch计算Loss值为Nan的一种情况【exp计算溢出利用softmax计算的冗余性解决】_futurewarning: non-finite norm encountered in torc_PuJiang-的博客-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6