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(),

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

被折叠的 条评论
为什么被折叠?



