我让 chatGPT 为了生成了一段代码
代码如下:
import torch
import torchvision.models as models
import torchvision.transforms as transforms
from PIL import Image
# 加载 ResNet50 模型并设置为评估模式
resnet50 = models.resnet50(pretrained=True)
resnet50.eval()
# 定义图片预处理方法
transform = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# 加载图片并进行预处理
img = Image.open('/Users/ponponon/Desktop/code/me/image2vector/resources/images/wallhaven-l8896l.png')
img_tensor = transform(img).unsqueeze(0) # 增加一个 batch 维度
# 使用 ResNet50 模型进行特征提取
with torch.no_grad():
features = resnet50(img_tensor)
# 打印特征向量的形状
print(features.shape) # 输出 (1, 2048)
但是我发现了一个问题,这个代码运行输出来的向量纬度是 1000,而不是 2048,我需要这么才能获取 2048 纬度的向量呢?
问题已解决,pytorch 里面的 resnet50 默认输出纬度是 1000
因为最后的全连接层是这样定义的:
Linear(in_features=2048, out_features=1000, bias=True)
要修改成输出为 2048 的,需要自己加一行代码
但是这样有一个坏处,会让结果变随机:https://github.com/pytorch/vision/issues/7937
因为 fc 层也是有权重参数的