不爱学习的小虾米 · 粤康码即将关闭健康申报等服务入口 ...· 1 年前 · |
乐观的番茄 · 2014年4月德国电动汽车销量年增25.8% ...· 1 年前 · |
腼腆的茶叶 · 记录|有多少中国人到过南极点? - 知乎· 1 年前 · |
胡子拉碴的课本 · 浅谈国产摩托车现状!借鉴模仿存在已久 ...· 1 年前 · |
奔跑的小虾米 · 均订四万七,《我真没想重生啊》或是起点第一都 ...· 1 年前 · |
问题
我试图使用PyTorch加载一个文件,但是错误状态
archive/data.pkl
不存在。
码
import torch
cachefile = 'cacheddata.pth'
torch.load(cachefile)
输出
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-4-8edf1f27a4bd> in <module>
1 import torch
2 cachefile = 'cacheddata.pth'
----> 3 torch.load(cachefile)
~/opt/anaconda3/envs/matching/lib/python3.8/site-packages/torch/serialization.py in load(f, map_location, pickle_module, **pickle_load_args)
582 opened_file.seek(orig_position)
583 return torch.jit.load(opened_file)
--> 584 return _load(opened_zipfile, map_location, pickle_module, **pickle_load_args)
585 return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)
~/opt/anaconda3/envs/matching/lib/python3.8/site-packages/torch/serialization.py in _load(zip_file, map_location, pickle_module, **pickle_load_args)
838 # Load the data (which may in turn use `persistent_load` to load tensors)
--> 839 data_file = io.BytesIO(zip_file.get_record('data.pkl'))
840 unpickler = pickle_module.Unpickler(data_file, **pickle_load_args)
841 unpickler.persistent_load = persistent_load
RuntimeError: [enforce fail at inline_container.cc:209] . file not found: archive/data.pkl
假说
我猜这跟泡菜有关,来自 文档
这个保存/加载过程使用最直观的语法,涉及的代码最少。以这种方式保存模型将使用Python的泡菜模块保存整个模块。这种方法的缺点是序列化数据绑定到保存模型时使用的特定类和精确的目录结构。之所以这样做,是因为泡菜没有保存模型类本身。相反,它保存到包含类的文件的路径,该类在加载时使用。正因为如此,当您在其他项目中使用时或在重构之后,您的代码可能会以各种方式中断。
版本
发布于 2020-10-05 10:00:22
结果文件被破坏了。在再次生成它之后,它没有问题地加载。
发布于 2021-03-22 18:40:19
我也面临着同样的问题。在GCP平台上,我直接从笔记本上下载了用GPU训练的模型(
.pt
)。当我通过
torch.load('models/model.pt', map_location=device)
将它加载到本地时,我得到了以下错误:
RuntimeError: [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip archive: failed finding central directory`.
我注意到下载的文件比预期的要小得多。和@Ian一样,从笔记本下载时文件被破坏了。最后,我必须先将文件从笔记本转移到( GCS )上的一个桶中,而不是直接下载,然后从GCS下载该文件。现在起作用了。
发布于 2021-03-25 14:14:07
我遇到这个问题不是因为一个文件,而是在我所处理的任何文件上。从文件大小来看,您可以说它们已经损坏,也就是说它们太小,太不完整,但是为什么总是这样创建它们呢?
我认为问题是,我对一个简单的类做了一个无害的修改,我正在保存这个类。因此,就像我创建了一个类
Foo
,保持数据不变,但添加了一些方法,然后尝试保存一个旧的实例,当我只有一个较新的类定义的
Foo
。
下面是我认为发生的事情的一个例子,但它并没有准确地再现它:
class Foo(object):
def __init__(self):
self.contents = [1,2,3]
torch.save(Foo(), "foo1.pth")
foo1 = torch.load("foo1.pth") # saved with class version 1 of Foo
# some days later the code looks like this
class Foo(object):
def __init__(self):
self.contents = [1,2,3]
def __len__(self):
return len(self.contents)
腼腆的茶叶 · 记录|有多少中国人到过南极点? - 知乎 1 年前 |