RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED【解决方法】

RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED【解决方法】

在使用github上的开源框架pytorch-deeplab-xception在自己的数据集上进行语义分割时,遇到了这个错误。遇到坑debug了两天才解决。
按这个错误提示的意思搜了搜解决办法,说应该重装CuDNN、pytorch、显卡使得版本匹配才行。于是照做,折腾好久好久,发现没用。
因为这个错误出现在损失函数那里,于是又怀疑是不是输入维度的原因。于是把输入的label和Output的维度转成三维四维什么的都尝试了,依然报这个错误。
最后快绝望的时候打印了一下label,发现是Label的值超出了值域。具体的,我的数据集有九个类别,所以label值对应的应该在0~8,但这个网络要求的label是单通道,我把label图像的值先归到三通道的0到8之间(每个位置三个通道上的数值完全相同),然后再用Image里的convert函数转化成单通道得到的图像,作为最终label。
万万没想到!这一步convert居然会把图像的值改变,比如我最后打印看发现这些单通道的图片的像素值域在0到255都有…这实在是令我万万没想到,我以为三通道转单通道就是只取其中一层不改变它的值,没想到它值域会发生这么大改变。
那么自然,网络应该输入的Label是0到8之间,然而我输入的Label值域不对所以报错。

问题原因:

出现这个问题,应该仔细检查label的维度和值域,而不是立马重装CuDNN、pytorch等,否则可能会走弯路。

解决方法:

将三通道的图片转化为numpy数组然后只取其中一个通道然后写成图片文件作为label,而不是直接使用Image Convert函数来将三通道24位深数转化为单通道8位深数。后者将使得值域发生改变。

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值