Pytorch 遇到[W IndexingUtils.h:25] Warning: indexing with dtype torch. uint8 is now deprecated警告信息*

Pytorch 遇到[W IndexingUtils.h:25] Warning: indexing with dtype torch. uint8 is now deprecated, please use a dtype torch. bool instead.(function expandTensors)警告信息

问题描述:
在跑用Pytorch搭的网络时出现了“[W IndexingUtils.h:25] Warning: indexing with dtype torch. uint8 is now deprecated, please use a dtype torch. bool instead.(function expandTensors)”警告信息,这种警告信息一直出现在训练的过程中,输出的loss几乎都被覆盖,严重影响我们看loss的输出。

这个警告是在loss.backward()中出现的,即是在反向传播的过程中出现的。

为什么会出现这个问题?
Pytorch1.2 以前的版本的tensor的索引都是用torch.uint8类型,Pytorch1.2以后tensor的索引都是用torch.bool类型。

解决方法:

方法一:
网上说忽略警告信息,可以解决。亲测无效。

import warnings
warnings.filterwarnings('ignore')  

方法二:
将你的Pytorch的版本降到1.2以前。但是由于目前最新的显卡( RTX 2060, RTX3090)的CUDA版本都是11.0以上,但是CUDA11.0只支持Pytorch1.7以上版本。如果你的显卡比较新,是无法将Pytorch降到1.2的。

方法三:
网上有一些解决在运行pyotch-yolov3时,出现[W IndexingUtils.h:25] Warning: indexing with dtype torch. uint8 is now deprecated的方案。
在这里插入图片描述从中看出看出obj_mask 和 noobj_mask都是x、y、w、h等的index,因此我们只需要把obj_mask和noobj_mask的类型都变成bool类型即可。

再看一个我遇到的例子:
在这里插入图片描述把pos和neg的类型都变成bool类型就行了,即 pos = pos.bool() 和 neg = neg.bool()。

总结:
当Pytorch的版本大于1.2,在计算loss时,无论你的损失函数是 F.cross_entropy() or F.smooth_l1_loss() or F.mse_loss or F.binary_cross_entropy()等,那么输入进损失函数的tensor的索引都必须是bool类型。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值