在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()函数加载了保存好的模型,并使用加载的模型进行了预测。
