出錯代碼:
torch.save(vocab_en, opt.vocab_path)
或pickle.dump(dict(vocab_en), open(opt.vocab_path,'wb'))
都會報pickle的錯誤
其中
from torchtext import data
EN = data.Field(init_token=EOS, eos_token=EOS, lower=True)
train_data, val_data, test_data = datasets.TranslationDataset.splits(path=opt.data, train='train', validation='valid', test='test',exts=('.input', '.output'), fields=(EN, EN))
EN.build_vocab(train_data.src, train_data.trg, min_freq=opt.min_freq)
return EN.vocab
pip list 查看torchtext版本,發現版本0.1.1,懷疑是版本太低的問題
pip --upgrade torchtext 升級版本,問題解決
另一種解決問題的方式:
使用dill代替pickle
https://blog.csdn.net/cswangjiawei/article/details/83067754
torch.save會報pickle錯誤的原因是 其內部默認也是利用pickle實現的,在torch.save時改變一個參數,使其內部利用dill實現,也可以解決這個問題
參考:https://github.com/pytorch/text/issues/73