unexpected EOF, expected 455433 more bytes. The file might be corrupted.不完美解决方案
在下载pytorch的预训练模型权重的时候,如果网络不稳定导致权重下载到一半中断,这时候如果我们不把损坏的权重文件删除,就会报unexpected EOF, expected xxxxxx more bytes. The file might be corrupted。
常规解决步骤:
- 找到权重文件,将权重文件删除
- 重新下载
我在网上查到的解决方案基本都围绕上面两个步骤,然而我找不到pytorch的权重文件!网上说一般在路径\home\用户名\.cache\torch
中,然而我打开.cache文件夹是这样的
这里要注意一下,.cache是个隐藏文件夹,在winSCP中按 ctrl+Alt+H 才会显示。
最终解决方案
1. 在torch.hub.load_state_dict_from_url中指定权重保存路径。
一般我们下载pytorch的预训练权重都是用torch文件夹中,hub.py文件里的load_state_dict_from_url(url, model_dir=None, map_location=None, progress=True, check_hash=False)
函数,查看函数定义我们发现,model_dir是一个允许我们指定权重保存路径的参数。因此我们在这里自己指定保存位置,下载失败之后就可以方便地删除文件,重新下载。
2. 用wget将模型下载到指定位置
在网络非常不稳定,或者模型文件非常大的时候,如果直接用load_state_dict_from_url()下载会失败无数次。我们再看该函数的源代码,发现注释里有这样一句话 If the object is already present in ‘model_dir’, it’s deserialized and returned. 也就是说我们是可以自己从别的途径直接先把权重下载到我们指定的位置,然后重新调用load_state_dict_from_url()的。
这时候就要用到wget大法了!
修改下面的指令到terminal输入
wget -P 模型保存的本地路径 url
如果下载到一般中断了,wget支持断点续传,加个-c就可以啦
wget -P 模型保存的本地路径 -c url
来源:oschina
链接:https://my.oschina.net/u/4318340/blog/4807685