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

How to get ouput from a particular layer from pretrained CNN in pytorch

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

例如

我的输入图像是 FloatTensor(3, 224, 336),我在我的 resnet 模型中发送了一批 size = 10,现在我想要的是 model.layer4,

返回的输出

现在我尝试的是 out = model.layer4(Variable(input)) 但它给了我输入尺寸不匹配错误(正如预期的那样),这是返回的确切错误

RuntimeError:需要输入维度 4 和 input.size[1] == 64 但输入的形状为:[10 x 3 x 224 x 336] 在 /Users/soumith/miniconda2/conda-bld/pytorch_1501999754274/work/torch/lib/THNN/generic/SpatialConvolutionMM.c:47

所以我很困惑,现在如何进行以获取我的第 4 层输出

PS:我的最终任务是将第 4 层输出和全连接层输出结合在一起(CNN 中的 Tweeking,一种门控 CNN),所以如果有人对这种情况有任何见解,请告诉我,可能我上面的做法不对

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

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