pytorch遇到问题总结

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

你可能感兴趣的:(深度学习,python,论文,pytorch,python,深度学习)