问题报错如下:
AttributeError Traceback (most recent call last)
Cell In[10], line 1
----> 1 model = torch.load('fruit30_pytorch_light.pth')
2 model = model.eval().to(device)
File E:\Anaconda\envs\pytorch\lib\site-packages\torch\serialization.py:712, in load(f, map_location, pickle_module, **pickle_load_args)
710 opened_file.seek(orig_position)
711 return torch.jit.load(opened_file)
--> 712 return _load(opened_zipfile, map_location, pickle_module, **pickle_load_args)
713 return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)
File E:\Anaconda\envs\pytorch\lib\site-packages\torch\serialization.py:1049, in _load(zip_file, map_location, pickle_module, pickle_file, **pickle_load_args)
1047 unpickler = UnpicklerWrapper(data_file, **pickle_load_args)
1048 unpickler.persistent_load = persistent_load
-> 1049 result = unpickler.load()
1051 torch._utils._validate_loaded_sparse_tensors()
1053 return result
File E:\Anaconda\envs\pytorch\lib\site-packages\torch\serialization.py:1042, in _load.<locals>.UnpicklerWrapper.find_class(self, mod_name, name)
1040 pass
1041 mod_name = load_module_mapping.get(mod_name, mod_name)
-> 1042 return super().find_class(mod_name, name)
AttributeError: Can't get attribute 'Net' on <module '__main__'>
这是在使用torch训练完自己写的Net类的model之后,如下所示:
torch.save(model, 'checkpoints/fruit30_pytorch_light.pth')
重新在预测使用阶段中应用
model = torch.load('fruit30_pytorch_light.pth')
model = model.eval().to(device)
出现此类问题是说明在新的应用py中,没有找到你自己定义这个model,所以要把整个自己写的model这个类复制到上面这个应用代码的上面即可!
AttributeError
: Can’t get
attribute
‘xxx’ on <
module
‘
main
’ from ‘xxx’ 另一种可能的解决办法
问题重述:我在学习
pytorch
时,跟着网课学到使用pickle模块序列化Word2Seq类,并将该类序列化保存在ws.pkl文件
中
。然后我又创建了lib.py文件使用下面代码反序列化ws.pkl时
出现
了该问题。
ws = pickle.load(open('ws.pkl', 'rb'))
先说明第一种解决办法(该方法并不总是有效):
在使用
pytorch
深度学习
框架的时候,我们加载预先训练好的完整pkl模型时,如果报错:
AttributeError
: Can't get
attribute
'Net' on
module
'__
main
__'
此时我们应该在主函数内加载一个当时训练时的类,用于初始化神经网络,如下:
# 加入:初始化
class
Net(nn.
Module
):
def __init__(self, hidden_layers=64):
super
(Net, self).__init__()
torch.load
出现
AttributeError
: Can't get
attribute
'Net' on
module
'__
main
__'问题解决方案
最近,将已经训练好的模型保存下来后,通过torch.load(
mod
el_path)方法读取时,发现没办法正常运行,抛出如下
错误
:
AttributeError
: Can't get
attribute
'Net' on
module
'__
main
__'
我直接好家伙,骂骂咧咧去搜为啥。
报错原因: torch.load()方法所
本文主要介绍了
AttributeError
: Can’t get
attribute
‘f’ on failed解决方案,希望能对学习
Python
的同学们有所帮助。
1. 问题描述
2. 解决方案
1.问题描述
将训练好的模型使用 torch.save(
mod
el, path)命令进行保存后,通过Trained_
mod
el = torch.load(path)命令进行加载,常
出现
错误
。具体代码和
出现
错误
详情如下:
import torch
import torch.nn as nn
#引进训练好的模型进行测试
path = '/root/Save_
mod
el/bert_hide_
mod
el.pkl'
#模型加载
Trained_
mod
el = torch.load(path)
出现
错误
:
D:\
Python
36\
python
.exe
mod
el2android.py
Traceback (most recent call last):
File "
mod
el2android.py", line 3, in <
module
>
mod
el=torch.load("MobileNetv2.cpkt")
File "D:\
Python
36\lib\site-pac
if __name__ == '__
main
__':
request_thread = threading.Thread(target=task)
request_thread.start()
解决方案,保证
main
线程存活