【问题标题】:Save and load a Pytorch model保存和加载 Pytorch 模型
【发布时间】:2019-09-26 05:55:12
【问题描述】:

我正在尝试在 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'

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

【问题讨论】:

  • 请更新错误消息的整个跟踪,如果您可以使用完整代码更新问题以便于重现错误和排除故障,会更容易
  • 您是否尝试过使用torch.save?为什么这不能满足您的需求?
  • 只需torch.load您的模型,然后直接使用它。见答案。

标签: python-3.x pytorch sequential


【解决方案1】:

您的问题没有提供足够的详细信息,无法正确回答。如果您尝试保存和加载自己的模型并为其定义类,请参阅 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似乎工作得很好。

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2020-07-17
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多