python - Pytorch:AttributeError:'function'对象没有属性'copy'
问题描述
我正在尝试加载state_dict
我在 Google Colab GPU 上训练的模型,这是我加载模型的代码:
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = models.resnet50()
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, n_classes)
model.load_state_dict(copy.deepcopy(torch.load("./models/model.pth",device)))
model = model.to(device)
model.eval()
这是错误:
state_dict = state_dict.copy()
AttributeError:“函数”对象没有属性“副本”
火炬:
>>> import torch
>>> print (torch.__version__)
1.4.0
>>> import torchvision
>>> print (torchvision.__version__)
0.5.0
请帮助我到处搜索无济于事
[完整错误详情][1] https://i.stack.imgur.com/s22DL.png
解决方案
我猜这是你做错了。你保存了函数
torch.save(model.state_dict, 'model_state.pth')
而不是 state_dict()
torch.save(model.state_dict(), 'model_state.pth')
否则,一切都应该按预期工作。(我在 Colab 上测试了以下代码)
替换model.state_dict()
为model.state_dict
重现错误
import copy
model = TheModelClass()
torch.save(model.state_dict(), 'model_state.pth')
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.load_state_dict(copy.deepcopy(torch.load("model_state.pth",device)))
推荐阅读
- java - Java Eclipse:线程“main”中的异常 java.lang.Error 在导入的包中
- c++ - 使用 C++ 移动输入文件
- algorithm - 更精简的算法通过多个标准对结构切片进行分组
- python - 我得到了这个形状 (1,254,254,1) 而预期的形状是 (1,254,254,3)
- java - Spark 独立模式下工作节点上的线程“主”java.lang.reflect.UndeclaredThrowableException 中的异常
- javascript - 总是承诺,但没有结果
- arrays - 如果 struct 中的字符大小为 30 或更大,则程序终止
- groovy - 对 JSON 响应中的数据进行排序以进行比较
- postgresql - PostgreSQL 没有账户名和安全 ID 之间的映射
- r - 从r中的fasta标头多次提取基因名称