冻结参数仅需两行代码
for param in net.parameters():
param.requires_grad = False
另外一个小技巧就是在nn.Module里冻结参数,这样前面的参数就是False,而后面的不变。
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 6, 5)
for p in self.parameters():
p.requires_grad=False
self.fc1 = nn.Linear(16 * 5 * 5, 120)
唯一需要注意的是,pytorch 固定部分参数训练时需要在优化器中施加过滤
。
optimizer = optim.Adam(filter(lambda p: p.requires_grad, net.parameters()), lr=0.1)