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

如何修改ResNet18的卷积层?含基础模块第二层卷积修改方法咨询

修改预训练ResNet18中BasicBlock的卷积层

问题描述

我有一个包含20类别的数据集,想要修改预训练的ResNet18模型。我知道可以通过以下代码把ResNet18最后一层线性层改成适配20分类(替换原来的1000分类):

resnet.fc = nn.Linear(512, 20)

但我不知道怎么访问其他层,比如BasicBlock里的第二层卷积。当我调用resnet.layer1时,得到的结构如下:

Sequential(
  (0): BasicBlock(
    (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
    (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (relu): ReLU(inplace=True)
    (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
    (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  )
  (1): BasicBlock(
    (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
    (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (relu): ReLU(inplace=True)
    (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
    (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  )
)

请问怎么获取并修改其中的conv2层?


解决方案

1. 直接访问目标conv2层

ResNet的layer1是Sequential容器,里面的每个元素都是BasicBlock实例,每个BasicBlock的子层都有明确命名。你可以通过索引+属性名直接定位:

  • 获取layer1中第一个BasicBlock的conv2:
    conv2_block0 = resnet.layer1[0].conv2
    
  • 获取layer1中第二个BasicBlock的conv2:
    conv2_block1 = resnet.layer1[1].conv2
    

2. 修改conv2层

要替换这个卷积层,直接重新赋值即可。比如把输出通道改成128:

# 替换第一个BasicBlock的conv2
resnet.layer1[0].conv2 = nn.Conv2d(64, 128, kernel_size=(3,3), stride=(1,1), padding=(1,1), bias=False)

# 替换第二个BasicBlock的conv2
resnet.layer1[1].conv2 = nn.Conv2d(64, 128, kernel_size=(3,3), stride=(1,1), padding=(1,1), bias=False)

3. 批量修改所有BasicBlock的conv2(可选)

如果需要修改模型中所有BasicBlock的conv2层,可以遍历模型的子模块:

from torchvision.models.resnet import BasicBlock

for module in resnet.modules():
    if isinstance(module, BasicBlock):
        # 这里示例将输出通道改为128,可根据需求调整参数
        module.conv2 = nn.Conv2d(64, 128, kernel_size=(3,3), stride=(1,1), padding=(1,1), bias=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:20:42