【debug】报错Assertion input_val >= zero && input_val <= one解决

        跑coco实例分割代码,报错一长串../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [164,0,0], thread: [31,0,0] Assertion input_val >= zero && input_val <= one报错,也没有其他提示信息,以下是我的两种解决方案。还有其他小报错:umpy/lib/function_base.py:334: VisibleDeprecationWarning: Creating an ndarray解决方案。

 

目录

🚩🚩1.报错信息

🚊🚊2.原因分析

✈️✈️3.解决方案

✏️3.1剔除最后一个epoch

✏️3.2修改batch_size

🚢🚢4.其他解决方案

✏️4.1其他报错

✏️4.1解决方案 

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--



🚩🚩1.报错信息

        在用服务器跑模型计算loss时,训练过程中报错,详细报错如下:Assertion input_val >= zero && input_val <= one failed.RuntimeError: CUDA error: device-side assert triggered。

../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [164,0,0], thread: [31,0,0] Assertion input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [10,0,0], thread: [33,0,0] Assertion input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [14,0,0], thread: [31,0,0] Assertion input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [88,0,0], thread: [46,0,0] Assertion input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [86,0,0], thread: [21,0,0] Assertion input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [64,0,0], thread: [71,0,0] Assertion input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [43,0,0], thread: [84,0,0] Assertion input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [166,0,0], thread: [21,0,0] Assertion input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [198,0,0], thread: [24,0,0] Assertion input_val >= zero && input_val <= one
../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [144,0,0], thread: [57,0,0] 
Assertion input_val >= zero && input_val <= one

...

../aten/src/ATen/native/cuda/Loss.cu:118: operator(): block: [34,0,0], thread: [91,0,0] Assertion input_val >= zero && input_val <= one

🚊🚊2.原因分析

        因为是在训练过程中,因此肯定不是所有的图像都有错,跑了几次之后,发现是在最后一个batch的训练过程中报错,且报错位置定位到loss计算,那就肯定是最后一个epoch算loss报错了。

        打印出最后一个batch的输出尺寸,果然,输出维度为(1,2,256,256),按照(b,c,w,h)推理,b=1 那就意味着最后一个epoch的样本数为1,没有被整除导致,比如,3201个样本,batch_size=32,前面每个epoch训练都是32张训练样本,到最后一个epoch,只剩下一个样本了,就会报这个错。

✈️✈️3.解决方案

✏️3.1剔除最后一个epoch

        找到问题的源头在哪就好解决了,只需要在dataloader定义的位置设置一个drop_last=True参数,忽略不能整除的最后一个epoch即可。具体代码:

dataloader = DataLoader(dataset=source_dataset,
                                       batch_size=config.batch_size,
                                       shuffle=True,
                                       pin_memory=True,
                                       collate_fn=collate_fn_w_transform,
                                       num_workers=config.num_workers,
                                       drop_last=True)

✏️3.2修改batch_size

        当然,如果你不想浪费那个样本,也可以通过调整batch_size来解决该问题,修改原则就是num_data = epoch*batch_size,保证三者均是整数,即保证epoch能被整除。

        我的第一次报错就是这样解决的。

 

🚢🚢4.其他解决方案

✏️4.1其他报错

        还有一种情况就是:一大串Assertion input_val >= zero && input_val <= one failed.的报错,可能不是batch_size设置的问题,我第二次遇到的时候不是,一直没法解决,但是我肯定是数据的问题,因为换个数据集就不报错。

        而且与之前不同的是,不是在训练过程中报错,而是刚开始训练就报错了。。。

✏️4.1解决方案 

        于是我开始检查我的数据输入,因为我用的是coco格式的数据集,主要问题是label转的时候肯呢个没转对。我主要修改了2个地方。

  1. 检查数据id,所有的id(image_id,category_id, label_id )都从1开始,之前是从0开始的,保险起见,修改成从1 开始了。
  2. 修改images和labels的个数,让其一一对应,因为之前有image存在,label是全黑的,没有目标就没写label,也就是是存在images有,label没有的情况,我转出来的coco格式txt也有这种情况,导致images个数与label个数不一致。所以修改了mask转coco的代码,检查images和label的路径,如果二者皆存在再运行mask转coco,就这一点就解决了很多麻烦。

        之前还会因为这个报错:numpy/lib/function_base.py:334: VisibleDeprecationWarning: Creating an ndarray。。。也是通过修改以下代码成功解决的。

...
mask_path = '/labels'

if os.path.exists(os.path.join(mask_path, image_name)):
    maks2coco(image_name)
...

        如果新报错还不能解决,可以试试其他博主的结局方案,对我的没有用。

np_data = np.array(data, dtype = object)

        在使用np.array报错的地方增加dtype = object

参考:https://www.5axxw.com/questions/content/b9snn8

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zy_destiny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值