欢迎访问宙启技术站
智能推送

利用torch.utils.load()加载预训练的PyTorch模型

发布时间:2024-01-02 20:39:10

torch.utils.load()函数用于加载预训练的PyTorch模型。它可以从指定的文件路径加载训练好的模型,并返回一个包含模型权重和其他相关信息的Python对象。加载预训练模型后,你可以使用这个对象进行推理、微调或进一步的训练。

下面有一个简单的例子,演示了如何使用torch.utils.load()加载预训练的PyTorch模型。

首先,假设我们已经训练好了一个用于图像分类的模型,并将其保存在文件model.pt中。

import torch
import torch.nn as nn
import torchvision.models as models
import torch.utils.model_zoo as model_zoo

# 创建一个简单的模型并保存
model = models.resnet18(pretrained=True)
torch.save(model, 'model.pt')

接下来,我们可以使用torch.utils.load()来加载模型。具体步骤如下:

# 加载模型
loaded_model = torch.load('model.pt')

# 打印模型结构
print(loaded_model)

输出将类似于:

ResNet(
  (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
  ...
  (fc): Linear(in_features=512, out_features=1000, bias=True)
)

可以看到,加载的模型是一个ResNet模型,具有相应的卷积层和全连接层。

加载的模型可以直接用于推理。下面是一个示例,将一张图片输入到模型中,获取预测结果:

import torchvision.transforms as transforms
from PIL import Image

# 加载图像并进行预处理
image = Image.open('image.jpg')
preprocess = 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]),
])
input_tensor = preprocess(image)
input_batch = input_tensor.unsqueeze(0)

# 将图像输入模型,并进行推理
with torch.no_grad():
    loaded_model.eval()  # 设置为评估模式
    output = loaded_model(input_batch)

# 获取预测结果
probabilities = nn.functional.softmax(output[0], dim=0)

在这个例子中,我们首先使用PIL库加载一张图片,并使用torchvision.transforms中的预处理函数将其转换为模型所需的张量格式。然后,我们将处理后的图像输入到加载的模型中,通过softmax函数获取了预测的概率分布。

这只是一个简单的例子,展示了如何使用torch.utils.load()加载预训练的PyTorch模型。实际上,根据具体的任务和模型结构,你可能需要进行更多的操作,比如微调模型参数、修改模型结构等。