pytorch报错RuntimeError: CUDA error: device-side assert tr

最近在用U-Net做语义分割,效果不太好所以开始调整代码,换函数,写着写着就出现一些奇怪的错误,如题:

RuntimeError: CUDA error: device-side assert tr

Debug定位错误

根据报错信息,定位到损失函数处,打个断点,发现中间所有tensor都出现了以下错误:

unable to get repr for <class ‘torch.Tensor‘>

出现这个错误大概率就是tensor的shape有问题,或者分类数与tensor维度不匹配
最终发现问题就是出在了损失函数上,开始时我选用的是BCEWithLogitsLoss()函数,由于损失值居高不下,我试着换成了BCELoss()函数,没有考虑到二者的差异性。

  1. BCEWithLogitsLoss() 自带sigmoid处理将tensor映射到【0.1】之间
  2. BCELoss()函数调用之前需要手动使用torch.sigmoid完成映射

常见损失函数

损失函数通过torch.nn包实现

  1. 交叉熵损失 CrossEntropyLoss
    在多分类任务中,经常采用 softmax 激活函数+交叉熵损失函数,因为交叉熵描述了两个概率分布的差异,然而神经网络输出的是向量,并不是概率分布的形式。所以需要 softmax激活函数将一个向量进行“归一化”成概率分布的形式,再采用交叉熵损失函数计算 loss。
  2. 二进制交叉熵损失 BCELoss
  3. BCEWithLogitsLoss
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值