如何在 pytorch 中获取预训练 VGG16 的特定层输出
How to get a particular layer output of a pretrained VGG16 in pytorch
我是 pytorch 的新手,我正在尝试获取 1*4096 格式的预训练模型 VGG16 特征向量的输出,该格式由最后一层之前的层返回。我发现 keras 中有类似的功能。 pytorch 中是否有相同的直接命令?
我使用的代码:
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)
负责创建 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(任何),在 this file.
的顶部有一个基础 class
要获得 4096
扁平化特征,您可以进行类似于 forward
:
中定义的操作
# Tensor from previous code snippet for brevity
x = model.avgpool(tensor)
x = torch.flatten(x, 1)
final_x = model.classifier[0](x) # only first classifier layer
您还可以遍历 modules
或 children
直到您想要的任何位置并输出结果(或结果或任何您想要的)
我是 pytorch 的新手,我正在尝试获取 1*4096 格式的预训练模型 VGG16 特征向量的输出,该格式由最后一层之前的层返回。我发现 keras 中有类似的功能。 pytorch 中是否有相同的直接命令?
我使用的代码:
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)
负责创建 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(任何),在 this file.
要获得 4096
扁平化特征,您可以进行类似于 forward
:
# Tensor from previous code snippet for brevity
x = model.avgpool(tensor)
x = torch.flatten(x, 1)
final_x = model.classifier[0](x) # only first classifier layer
您还可以遍历 modules
或 children
直到您想要的任何位置并输出结果(或结果或任何您想要的)