关于模型保存报错的问题
———— 破案了
目录
说一千道一万亦张图道尽一切
突出对比
万万没想到,问题出在后缀。
同样的模型,ptl报错,pth可以?
把后缀ptl改成pth,可以保存模型字典。
也仅限于保存和加载模型字典。
model。save照样报错
pt也可以
当然了,保存整个模型也不行
不同后缀报错各有千秋
ptl
为了他,我改完了所有的lambda函数,没有卵用
pth和ptl一样
pt
全文:: --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) ~\anaconda3\lib\site-packages\torch\serialization.py in _check_seekable(f) 307 try: --> 308 f.seek(f.tell()) 309 return True ~\anaconda3\lib\site-packages\torch\nn\modules\module.py in __getattr__(self, name) 1206 return modules[name] -> 1207 raise AttributeError("'{}' object has no attribute '{}'".format( 1208 type(self).__name__, name)) AttributeError: 'MultKAN' object has no attribute 'seek' During handling of the above exception, another exception occurred: AttributeError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_5908/2619555284.py in <module> ----> 1 torch.load(model,"model_weights.pt") ~\anaconda3\lib\site-packages\torch\serialization.py in load(f, map_location, pickle_module, **pickle_load_args) 697 pickle_load_args['encoding'] = 'utf-8' 698 --> 699 with _open_file_like(f, 'rb') as opened_file: 700 if _is_zipfile(opened_file): 701 # The zipfile reader is going to advance the current file position. ~\anaconda3\lib\site-packages\torch\serialization.py in _open_file_like(name_or_buffer, mode) 233 return _open_buffer_writer(name_or_buffer) 234 elif 'r' in mode: --> 235 return _open_buffer_reader(name_or_buffer) 236 else: 237 raise RuntimeError(f"Expected 'r' or 'w' in mode but got {mode}") ~\anaconda3\lib\site-packages\torch\serialization.py in __init__(self, buffer) 218 def __init__(self, buffer): 219 super(_open_buffer_reader, self).__init__(buffer) --> 220 _check_seekable(buffer) 221 222 ~\anaconda3\lib\site-packages\torch\serialization.py in _check_seekable(f) 309 return True 310 except (io.UnsupportedOperation, AttributeError) as e: --> 311 raise_err_msg(["seek", "tell"], e) 312 return False 313 ~\anaconda3\lib\site-packages\torch\serialization.py in raise_err_msg(patterns, e) 302 + " Please pre-load the data into a buffer like io.BytesIO and" 303 + " try to load from it instead.") --> 304 raise type(e)(msg) 305 raise e 306 AttributeError: 'MultKAN' object has no attribute 'seek'. You can only torch.load from a file that is seekable. Please pre-load the data into a buffer like io.BytesIO and try to load from it instead.
哦,是一样的
AI看看就好了、
在PyTorch中,模型保存通常使用两种文件格式:.pt
和.pth
。这两种后缀没有本质区别,它们都是用于保存PyTorch模型的状态字典(state dictionary)或整个模型(包括模型结构和参数)。
以下是关于何时使用这两种后缀的一般建议:
-
.pth后缀:
.pth
是PyTorch传统上使用的文件扩展名,它通常用于保存模型权重。这是最常见的选择,特别是在官方文档和示例中。 -
.pt后缀:
.pt
是另一种常见的文件扩展名,它同样可以用于保存模型权重或整个模型。这个后缀在某些情况下更受欢迎,因为有些人认为它更短、更易于输入。
实际上,你可以自由选择使用哪一个后缀,因为它们对PyTorch来说是完全等价的。以下是如何使用PyTorch保存和加载模型的示例:
保存模型权重(推荐):
torch.save(model.state_dict(), 'model_weights.pth') # 使用.pth后缀
# 或者
torch.save(model.state_dict(), 'model_weights.pt') # 使用.pt后缀
保存整个模型:
torch.save(model, 'entire_model.pth') # 使用.pth后缀
# 或者
torch.save(model, 'entire_model.pt') # 使用.pt后缀
加载模型权重:
model.load_state_dict(torch.load('model_weights.pth'))
# 或者
model.load_state_dict(torch.load('model_weights.pt'))
加载整个模型:
model = torch.load('entire_model.pth')
# 或者
model = torch.load('entire_model.pt')
重要的是,无论你选择哪种后缀,确保在加载模型时使用相同的后缀名。此外,选择哪种后缀通常取决于个人或团队的习惯。如果你在一个团队中工作,最好遵循团队已经建立的约定。
模型字典与优化器字典均可保存和加载了
原文地址:https://blog.csdn.net/m0_68339197/article/details/145234011
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!