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

在Python中如何使用torch.utils.load()加载模型

发布时间:2024-01-02 20:37:00

在Python中,可以使用torch.utils.load()函数加载已经保存在磁盘上的PyTorch模型。torch.utils.load()函数使用如下:

torch.utils.load(f, map_location=None, pickle_module=pickle)

其中,f参数是保存模型的文件路径,map_location参数用于指定加载模型时的设备(例如,"cuda:0"表示使用GPU 0),pickle_module参数指定使用的pickle模块(默认为Python内置的pickle模块)。这个函数会返回一个模型对象。

以下是一个使用torch.utils.load()函数加载和使用已经训练好的模型的例子:

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

# 定义一个简单的模型
class SimpleNet(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.fc2 = nn.Linear(hidden_size, output_size)
    
    def forward(self, x):
        x = self.fc1(x)
        x = torch.relu(x)
        x = self.fc2(x)
        return x

# 定义训练函数
def train(model, optimizer, criterion, inputs, labels):
    optimizer.zero_grad()
    outputs = model(inputs)
    loss = criterion(outputs, labels)
    loss.backward()
    optimizer.step()
    return loss.item()

# 声明训练数据和标签
inputs = torch.tensor([[1.0, 2.0, 3.0],
                       [4.0, 5.0, 6.0],
                       [7.0, 8.0, 9.0]])
labels = torch.tensor([[4.0],
                       [7.0],
                       [10.0]])

# 定义模型、优化器和损失函数
model = SimpleNet(3, 10, 1)
optimizer = optim.SGD(model.parameters(), lr=0.1)
criterion = nn.MSELoss()

# 训练模型
for epoch in range(100):
    loss = train(model, optimizer, criterion, inputs, labels)
    print(f"Epoch {epoch+1}, Loss: {loss:.4f}")

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

# 加载模型
loaded_model = SimpleNet(3, 10, 1)
loaded_model.load_state_dict(torch.load("model.pth"))

# 使用加载的模型进行预测
test_inputs = torch.tensor([[10.0, 11.0, 12.0],
                            [13.0, 14.0, 15.0]])
predictions = loaded_model(test_inputs)
print(f"Predictions: {predictions}")

在上面的代码中,我们首先定义一个简单的神经网络模型SimpleNet并进行训练。然后,我们保存训练好的模型到磁盘上的model.pth文件中。最后,我们使用torch.utils.load()函数加载了保存好的模型,并使用加载的模型进行了预测。