1.冻结前N层参数
for i, p in enumerate(model.parameters()):
if i < N:
p.requires_grad = False
2.冻结任意层参数
首先,需要知道某一层的名字;
# 打印模型各层的名字
for name, param in model.named_parameters():
if param.requires_grad:
print(name)
冻结网络任意层:
model = models.resnet50(pretrained=True)
frozen_layers = [model.layer1, model.layer2, model.layer3]
for layer in frozen_layers:
for name, value in layer.named_parameters():
value.requires_grad = False
params = filter(lambda p: p.requires_grad, model.parameters())
# 将 params 加入优化器
查看层的冻结情况:
for k, v in model.named_parameters():
print('{}:{}'.format(k, v.requires_grad))