出错代码:
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