保存和加载Pytorch模型

时间:2019-05-08 13:16:16

标签: python-3.x pytorch sequential

我正在尝试在colab上训练pytorch模型,然后保存模型参数并将其加载到本地计算机上。

训练后,模型参数存储如下:

torch.save(Model.state_dict(),PATH)

加载如下:

device = torch.device('cpu')
Model.load_state_dict(torch.load(PATH, map_location=device))

错误:

AttributeError: 'Sequential' object has no attribute 'copy'

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您的问题没有提供足够的详细信息以正确回答。如果您要保存和加载自己的模型并为其定义类,请参见this well known answer并说明为什么这不足以供您使用。

如果您要加载torch.nn.Sequential模型,那么据我所知,直接加载模型并使用它就足够了。如果它不在pytorch论坛上发布,则会出现什么错误。

现在来看我的示例,显示套管加载顺序模型,然后无错误使用它:


# test for saving everything with torch.save

import torch
import torch.nn as nn

from pathlib import Path
from collections import OrderedDict

import numpy as np

import pickle

path = Path('~/data/tmp/').expanduser()
path.mkdir(parents=True, exist_ok=True)

num_samples = 3
Din, Dout = 1, 1
lb, ub = -1, 1

x = torch.torch.distributions.Uniform(low=lb, high=ub).sample((num_samples, Din))

f = nn.Sequential(OrderedDict([
    ('f1', nn.Linear(Din,Dout)),
    ('out', nn.SELU())
]))
y = f(x)

# save data torch to numpy
x_np, y_np = x.detach().cpu().numpy(), y.detach().cpu().numpy()
db2 = {'f': f, 'x': x_np, 'y': y_np}
torch.save(db2, path / 'db_f_x_y')

db3 = torch.load(path / 'db_f_x_y')
f3 = db3['f']
x3 = db3['x']
y3 = db3['y']
xx = torch.tensor(x3)
yy3 = f3(xx)

print(yy3)

应该有一个官方答案,说明如何保存和加载nn.Sequential模型How does one save torch.nn.Sequential models in pytorch properly?,但是就目前而言,torch.savetorch.load似乎还可以。