1.对于我们pytorch中的每个Tensor来说,都可以设置requires_grad值,例如
x = torch.ones(2,4,requires_grad=True)
2.如果我们希望改变requires_grad的属性,则使用tensor.requires_grad_()方法,例如
x.requires_grad_(False)
3.自动求导注意事项:
- x要想求导,x必须是float类型
- 标量求导,只能标量对标量求导,或者标量对矢量、标量对矩阵求导
- 不是标量,也可以backward()进行求导
4.当模型的损失loss为一个值的时候,我们使用 loss.backward()来计算梯度
当模型的损失loss为多个值的时候,例如 loss=[loss1,loss2,loss3],那么我们可以让loss的各个分量分别对x求导,这个时候就采用:
loss.backward(gradient=torch.tensor([1,1,1])) #这里的1,1,1代表的是x 的梯度
关于backward参数的理解:Pytorch中的backward函数 - 知乎
5. 我们的模型中如何冻结某些层:
for parameter in model.module_list[idx].parameters():
parameter.requires_grad_(False)