我正在尝试在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'
有人知道如何解决这个问题吗?
答案 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.save
和torch.load
似乎还可以。