unexpected EOF, expected 455433 more bytes. The file might be corrupted.解決方案

unexpected EOF, expected 455433 more bytes. The file might be corrupted.不完美解決方案

在下載pytorch的預訓練模型權重的時候,如果網絡不穩定導致權重下載到一半中斷,這時候如果我們不把損壞的權重文件刪除,就會報unexpected EOF, expected xxxxxx more bytes. The file might be corrupted。

常規解決步驟:

  1. 找到權重文件,將權重文件刪除
  2. 重新下載

我在網上查到的解決方案基本都圍繞上面兩個步驟,然而我找不到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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章