0、认识torch中的梯度计算:
variable
autograd.Variable是torch.autograd中很重要的类。它用来包装Tensor,将Tensor转换为Variable之后,可以装载梯度信息。
Variable用来构建一个计算图中的节点。将Tensor转换为Variabla类型之后,该Tensor就成了计算图中的一个节点。对于该节点,有两个重要的特性:
- .data——获得该节点的值,即Tensor类型的值
- .grad——获得该节点处的梯度信息
关于Variable的参数之一“requires_grad”和特性之一“grad_fn”有要注意的地方,都和该变量是否是人自己创建的有关:
- requires_grad有两个值:True和False,True代表此变量处需要计算梯度,False代表不需要。变量的“requires_grad”值是Variable的一个参数,在建立Variable的时候就已经设定好,默认是False。
- grad_fn的值可以得知该变量是否是一个计算结果,也就是说该变量是不是一个函数的输出值。若是,则grad_fn返回一个与该函数相关的对象,否则是None。
1、只导入部分参数
Pytorch中,只导入部分模型参数的做法_我的博客有点东西-CSDN博客
核心部分:
path = 'xxx.pth'
model = Net()
save_model = t.load(path)
model_dict = model.state_dict()
state_dict = {k:v for k,v in save_model.items() if k in model_dict.keys()}
print(state_dict.keys()) # dict_keys(['w', 'conv1.weight', 'conv1.bias', 'conv2.weight', 'conv2.bias'])
model_dict.update(state_dict)
model.load_state_dict(model_dict)
2、固定指定的参数,不参与反向传播
核心部分:
for k,v in model.named_parameters():
if k!='XXX':
v.requires_grad=False#固定参数