如何从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)
我已经在 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)