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)