方法1:
net :
{
block1 = sequence{}
block2 = …………
}
在train代码中,指定完lossfunction后,
loss_func = nn.Cro……
(事先打印你的net , 得到你想要固定的部分的name , 我这里是一个block有多步操作,所以使用正则)
for name , parameter in model.named_parametes():
if fnmatch(name , "block1*"):
parameter.requires_grad = False
print(name , "has freezed.")
#之所以用正则,是因为我将所有需要固定的卷积放在block1中, 所以name为block1.1.weight , block1.2.…………
此外还有方法二在网络定义使用 with_no_grad参数,此处不再赘述。
该文介绍了在PyTorch训练过程中如何冻结网络的特定部分,如block1,以防止其参数在训练期间更新。方法一是通过遍历模型的named_parameters(),使用正则表达式匹配并设置requires_grad=False。方法二是利用with_no_grad上下文管理器在定义网络时阻止梯度计算。
3013





