Pickle load:ImportError:没有名为doc2vec_ext的模块

时间:2016-10-09 14:07:02

标签: python pickle gensim

这是我正在处理的结构:

src/
    processing/
        station_level/
            train_paragraph_vectors.py
    doc2vec_ext.py
    word_embeddings_station_level.py

我已在word_embeddings_station_level.py中训练并存储了一个模型,如下所示:

from src.doc2vec_ext import WeightedDoc2Vec

# ...

model = WeightedDoc2Vec(
    # ...
)

train(model, vocab, station_sentences, num_epochs)

# Saving the model -> pickles it
model.save(open(model_file, "w"))

到目前为止,此工作正常。但是,我想在train_paragraph_vectors.py中加载该模型,如下所示:

import sys
from src import doc2vec_ext
sys.modules["doc2vec_ext"] = doc2vec_ext

if __name__ == "__main__":
# ...
    model = doc2vec_ext.WeightedDoc2Vec.load(station_level_sentence_vectors)

但我得到了:

Traceback (most recent call last):
  File "E:/python/kaggle/seizure_prediction/src/processing/station_level/train_paragraph_vectors.py", line 57, in <module>
    model = doc2vec_ext.WeightedDoc2Vec.load(station_level_sentence_vectors)
  File "C:\Python27\lib\site-packages\gensim\models\word2vec.py", line 1684, in load
    model = super(Word2Vec, cls).load(*args, **kwargs)
  File "C:\Python27\lib\site-packages\gensim\utils.py", line 248, in load
    obj = unpickle(fname)
  File "C:\Python27\lib\site-packages\gensim\utils.py", line 911, in unpickle
    return _pickle.loads(f.read())
ImportError: No module named doc2vec_ext

doc2vec_ext.py

在这里你可以看到,我只是从gensim.models.Doc2Vec类继承并做了一些事情:

class WeightedDoc2Vec(Doc2Vec):

    def __init__(self, dm=1,window=5, f_size=0, size=100, min_count=1, negative=0, dbow_words=1, alpha=0.015, workers=8, seed=42, dm_weighted=False, dm_stacked=False):
        Doc2Vec.__init__(self,
            # Constructor arguments ..
            )

        # ...

我不知道这里有什么问题。我试图做sys.modules[],但它仍然无法正常工作。

如何加载我存储的模型?

重要:

我注意到我甚至无法从同一模块加载。如果我尝试在创建它的文件中加载模型(这里是word_embeddings_station_level.py),它仍然无法正常工作,但同样的错误。

1 个答案:

答案 0 :(得分:0)

保存和加载像pickle这样的二进制数据时,需要使用二进制模式,而不是文本模式。

Protected