Python 使用fast ai时如何修复“AWD装载状态下的错误”

Python 使用fast ai时如何修复“AWD装载状态下的错误”,python,machine-learning,torch,fast-ai,modelstatedictionary,Python,Machine Learning,Torch,Fast Ai,Modelstatedictionary,我正在使用fast ai库来训练IMDB评论数据集的样本。我的目标是实现情绪分析,我只想从一个小数据集开始,这个数据集包含1000条IMDB评论。我已经通过使用在VM中训练了模型 我保存了数据lm和数据clas模型,然后保存了编码器ft enc,然后保存了分类器学习者情绪模型。一、 然后,从虚拟机中获取这4个文件并将它们放在我的机器中,并希望使用这些预训练的模型来对情绪进行分类 这就是我所做的: 使用IMDB_示例文件 path=untar\u dataURLs.IMDB\u示例 语言模型数据

我正在使用fast ai库来训练IMDB评论数据集的样本。我的目标是实现情绪分析,我只想从一个小数据集开始,这个数据集包含1000条IMDB评论。我已经通过使用在VM中训练了模型

我保存了数据lm和数据clas模型,然后保存了编码器ft enc,然后保存了分类器学习者情绪模型。一、 然后,从虚拟机中获取这4个文件并将它们放在我的机器中,并希望使用这些预训练的模型来对情绪进行分类

这就是我所做的:

使用IMDB_示例文件 path=untar\u dataURLs.IMDB\u示例 语言模型数据 data_lm=TextLMDataBunch.from_csvpath,'text.csv' 情感分类器模型数据 data_clas=TextClasDataBunch.from_csvpath,'text.csv', vocab=数据列车ds.vocab,bs=32 使用在VM中调优的编码器构建分类器 学习=文本\u分类器\u学习器数据\u类别,AWD \u LSTM,drop\u mult=0.5 学习。加载编码器“ft\U enc” 加载经过训练的模型 学习。加载“情绪模型” 之后,我想用这个模型来预测一个句子的情绪。执行此代码时,我遇到以下错误:

RuntimeError: Error(s) in loading state_dict for AWD_LSTM:
   size mismatch for encoder.weight: copying a param with shape torch.Size([8731, 400]) from checkpoint, the shape in current model is torch.Size([8888, 400]).
   size mismatch for encoder_dp.emb.weight: copying a param with shape torch.Size([8731, 400]) from checkpoint, the shape in current model is torch.Size([8888, 400]). 
回溯是:

Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/SentAn/mainApp.py", line 51, in <module>
    learn = load_models()
  File "C:/Users/user/PycharmProjects/SentAn/mainApp.py", line 32, in load_models
    learn.load_encoder('ft_enc')
  File "C:\Users\user\Desktop\py_code\env\lib\site-packages\fastai\text\learner.py", line 68, in load_encoder
    encoder.load_state_dict(torch.load(self.path/self.model_dir/f'{name}.pth'))
  File "C:\Users\user\Desktop\py_code\env\lib\site-packages\torch\nn\modules\module.py", line 769, in load_state_dict
    self.__class__.__name__, "\n\t".join(error_msgs)))
因此,加载编码器时会发生错误。但是,我也尝试删除load_编码器行,但在下一行learn.load'Condition_model'时发生了相同的错误

我搜索了fast ai论坛,发现其他人也有这个问题,但没有找到解决方案。在文章中,用户说这可能与不同的预处理有关,尽管我不明白为什么会发生这种情况


有人知道我做错了什么吗?

看来数据类别和数据lm的词汇量是不同的。我猜这个问题是由数据分类和数据存储中使用的不同预处理引起的。为了核实我的猜测,我只使用了

data_clas.vocab.itos=data_lm.vocab.itos

在下一行之前

学习c=文本分类器学习器数据分类,AWD LSTM,drop mult=0.3


这已经修复了错误。

这似乎是个好主意,我想我当时没有试过。老实说,我放弃了尝试使用快速人工智能库,但我非常确定预处理是一样的。无论如何,谢谢你的回答!我也有同样的问题。这个答案解决了问题。