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

PyTorch中的模型序列化:使用torch.utils.serialization进行保存和加载

发布时间:2024-01-10 07:52:37

在PyTorch中,我们可以使用torch.utils.serialization模块来保存和加载训练好的模型。这个模块提供了几个函数来进行序列化,比如torch.save()torch.load()

首先,我们来看一下模型的保存。假设我们已经定义了一个模型,并且训练好了该模型。例如,我们定义了一个简单的线性回归模型:

import torch
import torch.nn as nn

# 定义线性回归模型
class LinearRegression(nn.Module):
    def __init__(self, input_size, output_size):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(input_size, output_size)

    def forward(self, x):
        out = self.linear(x)
        return out

# 创建模型实例
input_size = 1
output_size = 1
model = LinearRegression(input_size, output_size)

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 训练模型
num_epochs = 100
for epoch in range(num_epochs):
    # 前向传播和计算损失
    inputs = torch.tensor([[1.0], [2.0], [3.0], [4.0]])
    targets = torch.tensor([[2.0], [4.0], [6.0], [8.0]])
    outputs = model(inputs)
    loss = criterion(outputs, targets)

    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

在训练完成后,我们可以使用torch.save()函数将模型保存在磁盘上。这个函数需要两个参数:要保存的对象和保存的文件路径。接下来的例子将保存我们刚刚训练好的模型:

# 保存模型
torch.save(model.state_dict(), 'model.pth')

state_dict()方法返回模型的参数字典。通过将参数字典保存在磁盘上,我们可以在之后再次加载这个模型。

现在,我们来看一下模型的加载。使用torch.load()函数,我们可以从磁盘上加载已保存的模型。这个函数接受一个文件路径作为参数,并返回保存的模型的参数字典。我们可以使用这个字典来加载模型的参数,并将其应用到我们定义的模型中。下面是一个加载模型的例子:

# 加载模型
model = LinearRegression(input_size, output_size)
model.load_state_dict(torch.load('model.pth'))

# 使用加载的模型进行预测
input_data = torch.tensor([[5.0]])
output = model(input_data)
print(output)  # 输出为 [[10.0]]

在这个例子中,我们首先实例化了与保存的模型具有相同参数的模型。然后,我们使用load_state_dict()函数将保存的参数加载到这个新模型中。最后,我们使用加载的模型进行预测,并输出结果。

综上所述,我们可以使用torch.utils.serialization模块中的torch.save()torch.load()函数来保存和加载在PyTorch中训练好的模型。通过将模型的参数字典保存在磁盘上,我们可以在之后再次加载这个模型,并使用它进行预测或其他操作。