如何在Pythorch中获得预训练VGG16的特定层输出

2024-03-28 12:35:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Pythorch非常陌生,我正在尝试获得1*4096格式的预训练模型VGG16特征向量的输出,它是在最后一层之前由层返回的。我发现keras中也有类似的特性。Pythorch有没有直接命令?在

我使用的代码:

import torch
from torch import nn
from torch import optim
import torch.nn.functional as F
from torchvision import models
from torch.autograd import Variable
from PIL import Image

image1 = Image.open(r"C:\Users\user\Pictures\user.png")

model = models.vgg16(pretrained=True)

scaler = transforms.Resize((224, 224))
to_tensor = transforms.ToTensor()

img = to_tensor(scaler(image1)).unsqueeze(0)

model(img).shape
model(img)

Tags: tofromimageimportimgmodelmodelsnn
1条回答
网友
1楼 · 发布于 2024-03-28 12:35:58

负责创建features的网络部分名为。。。features(不仅在VGG中,对于torchvision内的大多数预训练网络来说都是这样)。在

只需使用此字段并按如下方式传递图像:

import torch

import torchvision

image = Image.open(r"C:\Users\user\Pictures\user.png")

# Get features part of the network
model = models.vgg16(pretrained=True).features
tensor = transforms.ToTensor()(transforms.Resize((224, 224))(image)).unsqueeze(dim=0)

model(tensor)

编辑:

要查看任何torchvision模型中发生了什么,可以检查它的源代码。对于VGG(any),在this file的顶部有一个基类。在

要获得4096扁平化的特性,您可以进行类似于forward中定义的操作:

^{pr2}$

您还可以在moduleschildren上迭代到您想要的任何地方,并输出结果(或结果或您想要的任何结果)

相关问题 更多 >