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

如何在PyTorch中微调VGG-19的FC1与FC2全连接层?

PyTorch微调VGG-19:仅微调最后两个全连接层的正确实现

问题背景

需实现VGG-19的两种微调方式:

  1. 全层微调(已完成)
  2. 仅微调最后两个全连接层(FC1对应classifier[0],FC2对应classifier[3]),当前已尝试部分代码,需确认正确性及后续处理方式。

正确实现代码

import torch
import torch.nn as nn
from torchvision import models

# 加载预训练VGG-19模型
model2 = models.vgg19(pretrained=True)

# 冻结所有网络参数,默认不参与梯度更新
for param in model2.parameters():
    param.requires_grad = False

# 解冻目标全连接层:FC1(classifier[0])和FC2(classifier[3])
for param in model2.classifier[0].parameters():
    param.requires_grad = True
for param in model2.classifier[3].parameters():
    param.requires_grad = True

# 替换最后一层分类器,适配自定义数据集的类别数
num_classes = len(class_to_idx)
model2.classifier[6] = nn.Linear(4096, num_classes)

关键细节说明

  1. 冻结与解冻逻辑:先全局冻结所有参数,再单独解冻需要微调的FC1和FC2,确保只有这两层的权重会在训练中更新。
  2. 最后一层处理:
    • 不需要保留原有的1000类别输出层,必须替换为对应数据集类别数的新Linear层,你当前的做法完全正确。
    • 新创建的Linear层默认requires_grad=True,刚好满足训练需求(全新层无预训练权重,必须从头训练)。
  3. 是否需要重新定义Sequential:不需要,直接替换classifier[6]更简洁高效,完全不破坏原模型的结构逻辑。如果重新定义Sequential,需要完整复制原classifier的前6层(0-5)再添加新层,反而冗余。

内容的提问来源于stack exchange,提问作者Sena Yalçın

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:17:36