[Error] nll_loss2d_forward_kernel: block: [5,0,0], thread: [339,0,0] Assertion `t >= 0 && t < n_clas

Error提示:

nll_loss2d_forward_kernel: block: [5,0,0], thread: [339,0,0] Assertion `t >= 0 && t < n_classes` failed.

而且奇怪的是,在训练中间断开:

| 39/101 [00:53<01:18,  1.27s/it]

代码细节:

数据都是统一处理的,算背景类,共有四类,使用min和max对target进行输出,tensor(0., device='cuda:0') , tensor(3., device='cuda:0'),代表对target的处理应该没有问题吧

按照网上所提示的,在文件头加入:

import os

os.environ['CUDA_LAUNCH_BLOCKING'] = '1'

从而获得更详细提示,得出错误在cross_entropy_loss = F.cross_entropy(student_output, labels.squeeze(1).long())这一句上,

对这一句进行测试:

labels_f = labels.squeeze(1).long()

print("标签的最小值:", labels_f.min().item())

print("标签的最大值:", labels_f.max().item())

print("标签的dtype:", labels_f.dtype)

assert labels_f.min() >= 0, "标签张量包含负值。"

assert labels_f.max() < student_output.size(1), f"标签张量的值超出了有效的类别范围 [0, {student_output.size(1)-1}]。"

assert labels_f.dtype == torch.long, "标签张量的类型必须是 LongTensor。"

cross_entropy_loss = F.cross_entropy(student_output, labels_f)

发现错误地方输出标签的最大值: 127.0

随后寻找label被错误赋值的地方:发现了,标签BUG! 我服了。

至此,已解决该问题,遇到了两次,第一次是类别设置错误,第二次发现标签有异常值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值