pytorch 如何更改resnet 18中的第一个转换层?

8tntrjer  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(187)

我有一个有20类的数据,我想使用一点修改的pretraied模型。我知道如果我们想改变ResNet 18的最后一个线性分类20类(而不是1000);我们可以这样写:

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

但是我不知道如何访问其他层?比如Bacic块中的第二个卷积?
当我调用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): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)呢?

vhmi4jdf

vhmi4jdf1#

您可以按如下方式访问图层(conv2) in sequential number (0) of layer.1

from torchvision import datasets, transforms, models
resnet = models.resnet18(pretrained=True)
print(resnet.layer1[0].conv2)

输出:

Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), 
bias=False)

相关问题