pytorch遇到问题总结

5 篇文章 0 订阅
4 篇文章 1 订阅

backward之后x.grad为None

首先检查是否为叶节点,叶节点的require_grad属性是否为True。也有可能是使用的模型中存在torch.max等无法算梯度的操作导致其上层的参数无法计算梯度。

Missing key(s) in state_dict:…

这属于单/多GPU之间模型加载问题,以下总结单/多GPU之间模型加载方法:

# 单GPU加载多GPU模型
model.cuda()
checkpoint = torch.load('model.pth')
model.load_state_dict({k.replace('module.', ''): v for k, v in checkpoint["backdoor"].items()})

剩下的坑以后再填…

TypeError: conv1d() received an invalid combination of arguments

可能是因为传入的数据的格式不一致,尤其注意检查是numpy.ndarray还是torch.tensor类型。

return torch.batch_norm(\ RuntimeError: running_mean should contain 61 elements not 64

batchnormalize层是对整个batch进行规范化的,如果传入的数据缺少batch维度的话会报错,因此需要检查传入数据的维度。一条数据可以用data.unsqueeze(0)在增加一个维度。

ValueError: optimizer got an empty parameter list

# 原代码
self.uap = nn.Parameter(torch.zeros(size=(shape), requires_grad=True)).cuda()

报错后调试发现加了cuda之后参数的数量变为0,修改代码如下:

self.uap = nn.Parameter(torch.zeros(size=(shape), requires_grad=True))

return torch._C._nn.linear(input, weight, bias) RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)

# 原代码
embedding_dim = 256
self.Cross_attention = CrossAttention(in_dim=embedding_dim, out_dim=embedding_dim, in_q_dim=embedding_dim, hid_q_dim=embedding_dim)

而我的输入的维度是(batch_size, 1920, 10),导致全连接层维度不匹配。修改代码如下:

embedding_dim = 10
self.Cross_attention = CrossAttention(in_dim=embedding_dim, out_dim=embedding_dim, in_q_dim=embedding_dim, hid_q_dim=embedding_dim)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值