代码之家  ›  专栏  ›  技术社区  ›  Vipin Chaudhary

如何从pytorch中预训练的CNN的特定层输出

  •  1
  • Vipin Chaudhary  · 技术社区  · 7 年前

    我已经在imagenet数据集上对CNN(RESNET18)进行了预训练,现在我想要的是从特定层获得输入图像的输出,

    例如

    我的输入图像是 FloatTensor(3, 224, 336) 我发了一批 size = 10 在我的resnet模型中,现在我想要的是模型返回的输出。第4层,

    现在我尝试的是 out = model.layer4(Variable(input)) 但它给了我输入维度不匹配的错误( ),这就是返回的确切错误

    运行时错误:需要输入维度4和输入。尺寸[1]==64,但在/Users/soumith/miniconda2/conda bld/pytorch_1501999754274/work/torch/lib/THNN/generic/SpatialConvolutionMM处获得形状输入:[10 x 3 x 224 x 336]。c: 47

    所以我很困惑,现在该如何获得第4层的输出

    1 回复  |  直到 7 年前
        1
  •  4
  •   AmirHossein    7 年前

    您必须创建一个包含从开始到所需块的所有层的模块:

    resnet = torchvision.models.resnet18(pretrained=True)
    f = torch.nn.Sequential(*list(resnet.children())[:6])
    features = f(imgs)