You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

预训练VGG16冻结卷积层训练分类器时出现RuntimeError报错如何解决

报错产生原因
  • 错误使用requires_grad_接口:requires_grad_是PyTorch内置的可调用方法,不是可赋值属性,代码中model_conv.classifier.requires_grad_=True的写法完全不生效,遍历冻结所有参数后,分类器层的参数requires_grad仍为False,反向传播时没有可计算的梯度触发报错。
  • 分类层修改逻辑错误:直接修改out_features属性仅改变了参数描述值,没有实际修改分类层的权重张量形状,也不会自动开启参数梯度,同时还会导致后续计算时输出维度和标签维度不匹配的隐藏问题。
正确修改方案

直接替换VGG16分类器的最后一层全连接层即可,新生成的层参数默认开启梯度,无需额外手动设置梯度开关,完全匹配「冻结卷积层仅训练分类器」的需求,修复后代码如下:

model_conv = torchvision.models.vgg16(pretrained=True)
# 冻结全部参数
for param in model_conv.parameters():
    param.requires_grad = False
# 替换最后一层全连接层,适配自定义数据集类别数
num_ftrs = model_conv.classifier[6].in_features
model_conv.classifier[6] = nn.Linear(num_ftrs, len(class_names))

model_conv = model_conv.to(device)

criterion = nn.CrossEntropyLoss()

optimizer_conv = optim.SGD(model_conv.classifier.parameters(), lr=0.001, momentum=0.9)

exp_lr_scheduler = lr_scheduler.StepLR(optimizer_conv, step_size=7, gamma=0.1)

内容的提问来源于stack exchange,提问作者Dhruv Vashist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:27:05