【Pytorch坑点集合】

本文总结了PyTorch训练过程中遇到的几种典型错误,包括:未建立计算图关系、CUDA错误、空张量前传、多次前向传播导致显存爆炸、图片放缩操作错误、反向传播变量无梯度、CUBLAS初始化失败、导入库冲突、设备侧断言触发和非叶子节点优化问题。针对每种错误,文章提供了详细的错误原因分析和解决策略,帮助读者更好地理解和解决这些问题。
1. One of the differentiated Tensors appears to not have been used in the graph

出现原因:出现在使用autograd.grad(loss, x)手动求导时。出现原因一般是loss和x之间没有建立计算图关系,即loss不能由x经过计算得来,所以不能反向传播。
解决办法:检查loss的计算过程是不是用到了x。特别注意如果使用循环迭代计算loss,如Adversarial Training中的PGD,每次迭代的loss是不是用到了上次迭代的变量来计算,而如果你让loss只对此次迭代的中的变量求导就会报这个错。

2. RuntimeError: CUDA error: invalid configuration argument

出现原因:将空tensor传入模型前向传播也会报这个错。
如果在模型前向传播的时候报了这个错,网上有些地方说是因为对input的切片操作引起在gpu上内存不连续所致(如这篇),试图通过将model(x)改为model(x.contiguous())解决。虽然我也使用了对x切片的操作,但我这样搞并不能解决,后来发现是由于切片操作可能存在导致x为空tensor。将空tensor传入模型前向传播也会报这个错。
我的出错代码:

for c in range(self.num_classes):  #calculate loss class-wisely
	class_index = (y == torch.tensor(c)).nonzero().squeeze(1).cuda() #我的算法逻辑中,class_index可能为空tensor,一开始没想到
    # if len(class_index)>0: 加上判断index是否为0就不报错了
    worst_ce_loss_conditioned_on_y =F.cross_entropy(self.predict(transfered_x[class_index].contiguous()),
                                                                        y[class_index].cuda().contiguous(),
                           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值