首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >' doc2vec‘对象没有属性’输出‘,同时为tensorflow服务保存doc2vec

' doc2vec‘对象没有属性’输出‘,同时为tensorflow服务保存doc2vec
EN

Stack Overflow用户
提问于 2022-02-24 12:55:41
回答 1查看 191关注 0票数 1

我一直试图从github保存一个电影推荐模型,然后使用tf服务服务。下面的代码将首先从我的语料库中创建一个taggs列表,然后根据这些列表提供向量。

代码语言:javascript
复制
mv_tags_doc = [TaggedDocument(words=(D), tags=[str(i)]) for i, D in enumerate(mv_tags_corpus)]

max_epochs = 50
vec_size = 20
alpha = 0.025

model = Doc2Vec(alpha=alpha, 
               min_alpha=0.00025,
               min_count=1,
               dm=0) # paragraph vector distributed bag-of-words (PV-DBOW)
 
model.build_vocab(mv_tags_doc)

print('Epoch', end = ': ')
for epoch in range(max_epochs):
 print(epoch, end = ' ')
 model.train(mv_tags_doc,
             total_examples=model.corpus_count,
             epochs=model.epochs)
 # decrease the learning rate
 model.alpha -= 0.0002
 # fix the learning rate, no decay
 model.min_alpha = model.alpha

当我尝试使用可用的文档这里保存它时

代码语言:javascript
复制
import tempfile

MODEL_DIR = tempfile.gettempdir()
version = 1
export_path = os.path.join(MODEL_DIR, str(version))
print('export_path = {}\n'.format(export_path))

tf.keras.models.save_model(
    model,
    export_path,
    overwrite=True,
    include_optimizer=True,
    save_format=None,
    signatures=None,
    options=None
)

print('\nSaved model:')
!ls -l {export_path}

我知道这个错误

代码语言:javascript
复制
AttributeError                            Traceback (most recent call last)
/tmp/ipykernel_563154/3914941631.py in <module>
      6 print('export_path = {}\n'.format(export_path))
      7 
----> 8 tf.keras.models.save_model(
      9     model,
     10     export_path,

~/anaconda3/lib/python3.9/site-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs)
     65     except Exception as e:  # pylint: disable=broad-except
     66       filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67       raise e.with_traceback(filtered_tb) from None
     68     finally:
     69       del filtered_tb

~/anaconda3/lib/python3.9/site-packages/keras/saving/saving_utils.py in try_build_compiled_arguments(model)
    319 def try_build_compiled_arguments(model):
    320   if (not version_utils.is_v1_layer_or_model(model) and
--> 321       model.outputs is not None):
    322     try:
    323       if not model.compiled_loss.built:

AttributeError: 'Doc2Vec' object has no attribute 'outputs'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-24 18:20:10

我不希望tf.keras.models.suave_model()函数(它的命名听起来是特定于TensorFlow & Keras )工作在Gensim Doc2Vec模型上,它不是TensorFlow或Keras的一部分,也不是TensorFlow或Keras的相关模型。

查看save_model(),我看到它声明的功能是:

将模型保存为TensorFlow SavedModel或HDF5文件。

"TensorFlow SavedModel“和"HDF5文件”都不应该被期望为足够的格式来保存另一个项目的自定义模型(在本例中是一个Gensim Doc2Vec对象),除非它特别声称它是一种功能。因此,某种类型的失败或错误,这里是预期的行为。

如果您真正的目标是以后能够重新加载模型,那么根本不涉及TensorFlow/Keras。你可以:

  1. 使用Python的内部pickle机制,或
  2. 使用方法来对Gensim包中的类进行建模。,它使用自己的pickel-numpy-based保存格式。例如:
代码语言:javascript
复制
filename = 'my_doc2vec_model'
initial_model.save(filename)

请注意,这样的保存可能会分散在几个相关的文件上,所有这些文件都是从您提供的相同字符串开始的,这些字符串应该放在一起。(也就是说,在上面的代码之后,确保将以字符串'my_doc2vec_model'开头的任何和所有文件放在一起。)

然后通过调用预期模型类上的.load()重新加载:

代码语言:javascript
复制
reloaded_model = Doc2Vec.load(filename)

另外:您的Doc2Vec代码显示了许多不好的做法。使用如此低的min_count=1几乎总是一个坏主意,用这种算法来减缓训练和恶化结果。在您自己的循环中多次调用alpha,自己减少.train(),就是不必要的复杂和易出错。无论哪种模板/教程认为这种方法可能是不好的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71252330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档