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

时间:2017-10-01 15:28:30

标签: deep-learning pytorch resnet

我在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] at / Users / soumith / miniconda2 / conda- BLD / pytorch_1501999754274 /工作/炬/ LIB / THNN /通用/ SpatialConvolutionMM.c:47

所以我很困惑,现在如何继续获取我的layer4输出

PS:我的最终任务是将layer4输出和完全连接的图层输出结合在一起(在CNN中进行Tweeking,有点CNN),所以如果有人对这种情况有任何见解那么请告诉我,也许我的上述方法不是对了

1 个答案:

答案 0 :(得分:1)

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

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