Faster RCNN pytroch1.0 训练时:Warning: NaN or Inf found in input tensor.

文章目录

问题

  1. 在Pascal voc和coco上训练Faster RCNN都正常
  2. 在训练自己的数据集时(Pascal voc格式)训练Faster R-CNN pytorch1.0时出现Warning: NaN or Inf found in input tensor.

原因

  1. 可能是learning rate太大,调小learning rate。最有效的方法是learning rate设为0,看看是不是还有nan的问题。
  2. 因为自己的数据是从0开始的,但是源码中-1,如果这时候annotation中有为0的就会出现越界的问题。

解决

  1. 设置lr=0,如果不在出现loss=nan的问题,说明是learning rate太大,导致了梯度爆炸或梯度消失。可调整learning rate和weight decay。

  2. 如果lr=0后,依然存在loss=nan的问题,就修改pascal_voc.py中获取坐标框的代码:

    修改前
            bbox = obj.find('bndbox')
            # Make pixel indexes 0-based
            x1 = float(bbox.find('xmin').text) - 1
            y1 = float(bbox.find('ymin').text) - 1
            x2 = float(bbox.find('xmax').text) - 1
            y2 = float(bbox.find('ymax').text) - 1
    修改后
            bbox = obj.find('bndbox')
            # Make pixel indexes 0-based
            x1 = float(bbox.find('xmin').text) # - 1
            y1 = float(bbox.find('ymin').text) # - 1
            x2 = float(bbox.find('xmax').text) # - 1
            y2 = float(bbox.find('ymax').text) # - 1
    

    若设置了翻转(cfg.TRAIN.USE_FLIPPED = True),则需要在imdb.py中的def append_flipped_images(self)方法:

    修改前      
        boxes[:, 0] = widths[i] - oldx2  - 1
        boxes[:, 2] = widths[i] - oldx1  - 1
    修改后	 
        boxes[:, 0] = widths[i] - oldx2  # - 1
        boxes[:, 2] = widths[i] - oldx1  # - 1
    
  3. 最后记得清理data文件里面的缓存文件cache

参考:
【1】https://blog.csdn.net/qq_29936933/article/details/111378275
【2】https://github.com/jwyang/faster-rcnn.pytorch/issues/136

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个警告是指在输入张量中发现了 NaNInfNaN 表示不是数字(Not a Number),Inf 表示无穷大(Infinity)。在机器学习和深度学习中,这通常表示模型训练过程中出现了问题,例如数值溢出或未处理的缺失值。为了确保模型的正确性,需要对输入数据进行检查并解决这个问题。 ### 回答2: 在机器学习或深度学习模型的训练过程中,我们通常会将大量的数据输入到模型中进行学习。然而,由于训练数据的质量的问题或者数据处理的问题等,我们有会在数据中发现一些不合理的值,例如“NaN”或“Inf”。当出现这些问题,我们通常会从模型的输出信息或者训练过程的日志中看到这样的警告信息:“Warning: root: NaN or Inf found in input tensor.”。这个警告信息告诉我们在输入张量中存在NaNInf。 首先,NaN代表不是一个数,通常出现在无穷大的运算中,例如0/0。Inf代表正无穷或负无穷,通常出现在除以0的运算中。当我们在处理数据,如果一个输入张量包含NaNInf,模型的输出结果很可能是不可靠的。 发现这种问题,我们应该尽快查找原因以及修复这个问题。通常找到这个问题的方法包括: 1. 检查数据源:首先我们应该检查我们的输入数据是否正确。如果数据源出现了问题,像数据文件损坏或数据采集出现漏洞,将大大影响整个模型的训练。 2. 检查数据预处理过程:我们的数据可能需要在输入到模型之前进行预处理,这可能就是数据出现问题的地方。例如,我们可能会对某些数据进行标准化处理,但是如果我们在标准化过程中出现了0作为除数的情况,就会出现Inf。 3. 检查模型的架构和参数:如果实际数据值本身不可能包含NaNInf,则问题可能出现在模型架构、参数或模型的实现中。 所以,当我们在训练模型看到这个警告信息,我们需要仔细检查我们的数据集,确保数据质量没有问题,并且要检查模型的架构和参数是否存在问题。正确的解决方法将有助于我们的模型在训练过程中更快地走向成功。 ### 回答3: 这个警告是在深度学习模型中出现的常见问题。它表示在输入张量中出现了NaN(非数)或Inf(无穷大)的值。它可能是由于训练数据中存在错误或缺失值等问题导致的。 在深度学习中,NaNInf值会影响计算结果,因为它们可能会在模型中传播,导致输出结果不稳定。这可能导致训练不收敛或模型在测试产生错误的结果。 为了解决这个问题,我们可以检查输入数据中是否存在缺失值或无效值,并进行必要的数据清理和预处理。我们还可以使用数据填充或删除缺失值的方法,避免NaNInf值的出现。 此外,我们可以通过添加激活函数,正则化或减少学习率等技术来防止模型中出现NaNInf值。此外,我们可以添加断言或assert语句来检查模型是否输出了异常值。这样可以帮助我们及发现问题并解决它们。 最后,我们应该认真处理这个警告并采取必要的措施来确保我们的深度学习模型可以正常运行,并产生准确可靠的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值