在对torchvision已有模型进行编辑的时候会保存已有训练结果,只针对编辑过的层进行训练,可以通过对requires_grad的赋值实现
import torch
import torchvision
from torch import optim, nn
def InitMode(mode_name):
if mode_name == 'resnet152':
return torchvision.models.resnet152(weights=torchvision.models.ResNet152_Weights.DEFAULT)
elif mode_name == "resnet50":
return torchvision.models.resnet50(weights=torchvision.models.ResNet50_Weights.DEFAULT)
elif mode_name == "vgg16":
return torchvision.models.vgg16(weights=torchvision.models.VGG16_Weights.DEFAULT)
else:
exit()
mymodel = InitMode("vgg16")
# 修改前
for name, param in mymodel.named_parameters():
print(name, param.requires_grad)
print("=" * 30)
# 修改requires_grad
for param in mymodel.parameters():
param.requires_grad = False
for name, param in mymodel.named_parameters():
print(name, param.requires_grad)
print("=" * 30)
mymodel.classifier[6] = nn.Linear(4096, 10)
# 修改后
for name, pa