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

使用torch.utils.serialization模块在PyTorch中保存和加载训练好的模型

发布时间:2024-01-07 09:50:34

PyTorch提供了torch.utils.serialization模块,用于保存和加载训练好的模型。该模块包含了保存和加载模型的功能,以及将模型转换为不同格式的功能。

1. 保存模型

要保存模型,首先需要将模型的状态保存下来。在PyTorch中,可以通过调用模型的state_dict()方法来获取到模型的状态字典。此外,还需要保存模型的其他相关信息,如优化器的状态字典、训练轮次等。

import torch
import torch.nn as nn
import torch.optim as optim

# 假设已经定义了模型和优化器
model = MyModel()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 保存模型状态
torch.save({
    'model_state_dict': model.state_dict(),
    'optimizer_state_dict': optimizer.state_dict(),
    'epoch': epoch
}, 'model.pth')  # 保存路径为model.pth

在上述示例中,首先调用model.state_dict()方法获取模型的状态字典,并将其保存为'model_state_dict'。同样地,对优化器也调用optimizer.state_dict()方法进行保存。此外,还保存了当前的训练轮次。

2. 加载模型

要加载保存的模型,首先需要定义模型的类并初始化模型。然后,使用torch.load()方法加载模型的保存状态字典,并将其加载到模型中。

import torch
import torch.nn as nn
import torch.optim as optim

# 假设已经定义了模型和优化器
model = MyModel()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 加载模型状态
checkpoint = torch.load('model.pth')

model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
epoch = checkpoint['epoch']

model.eval()  # 设置模型为评估模式
# 接下来可以使用加载的模型进行预测或其他操作

在上述示例中,首先定义并初始化模型。然后,调用torch.load()方法加载保存的状态字典,并将其分别加载到模型和优化器中。最后,还可以通过设置model.eval()将模型设置为评估模式。

3. 保存和加载整个模型

除了保存和加载模型的状态字典,PyTorch还提供了保存和加载整个模型的功能。这意味着可以直接保存整个模型的参数和结构,并加载整个模型。

import torch
import torch.nn as nn
import torch.optim as optim

# 假设已经定义了模型和优化器
model = MyModel()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 保存整个模型
torch.save(model, 'model.pth')  # 保存路径为model.pth

# 加载整个模型
model = torch.load('model.pth')

在上述示例中,直接调用torch.save()方法将整个模型保存在'model.pth'中。同样地,可以使用torch.load()方法直接加载整个模型。

综上所述,torch.utils.serialization模块提供了保存和加载模型的功能,可以灵活地保存模型的状态字典或整个模型。通过保存和加载模型,在训练完成后可以方便地重用模型,或将模型用于部署和推理。