理解并使用torch.utils.load()来加载PyTorch模型的方法
发布时间:2024-01-02 20:40:57
要加载PyTorch模型,可以使用torch.utils.load()函数。这个函数可以从磁盘上加载保存的模型,并返回一个包含加载的对象的Python对象。
下面是一个加载训练好的ResNet模型的示例:
import torch
import torchvision.models as models
# 创建一个ResNet模型实例
model = models.resnet18()
# 保存模型
torch.save(model.state_dict(), 'resnet_model.pth')
# 加载模型
loaded_model = models.resnet18()
loaded_model.load_state_dict(torch.load('resnet_model.pth'))
# 模型现已成功加载,可以调用forward()函数进行推理
input_tensor = torch.randn(1, 3, 224, 224)
output = loaded_model(input_tensor)
print(output)
在这个例子中,我们首先创建一个ResNet模型实例,并将其保存在磁盘上。我们使用了model.state_dict()来保存模型的权重。然后,我们创建了另一个ResNet模型实例loaded_model,并使用torch.load()函数加载之前保存的模型权重。
一旦模型加载成功,就可以通过将输入张量传递给模型的forward()函数来进行推理。在这个例子中,我们使用了一个随机生成的输入张量input_tensor,并通过loaded_model进行推理。最后,我们打印出输出张量output。
需要注意的是,加载模型时,要确保加载的模型与加载模型的架构相同。在这个例子中,我们创建了两个相同的ResNet模型实例,并加载了之前保存的模型权重。如果架构不一致,例如尝试将权重加载到不同的模型实例上,可能会引发错误。
此外,还可以加载整个模型而不仅仅是模型的权重。这可以通过直接保存和加载整个模型对象来实现。以下是一个加载整个模型的示例:
import torch
import torchvision.models as models
# 创建一个ResNet模型实例
model = models.resnet18()
# 保存整个模型
torch.save(model, 'resnet_model.pth')
# 加载整个模型
loaded_model = torch.load('resnet_model.pth')
# 模型现已成功加载,可以调用forward()函数进行推理
input_tensor = torch.randn(1, 3, 224, 224)
output = loaded_model(input_tensor)
print(output)
在这个例子中,我们直接使用torch.save()函数保存整个模型。然后,我们使用torch.load()函数加载整个模型,并将其保存在loaded_model中。之后的步骤与前一个例子相同。
总结起来,使用torch.utils.load()函数加载PyTorch模型可以通过两种方法实现:加载模型权重或加载整个模型对象。无论哪种方法,都可以通过调用forward()函数进行推理。
