我一直试图从github保存一个电影推荐模型,然后使用tf服务服务。下面的代码将首先从我的语料库中创建一个taggs列表,然后根据这些列表提供向量。
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当我尝试使用可用的文档这里保存它时
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}我知道这个错误
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'发布于 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。你可以:
pickle机制,或pickel-numpy-based保存格式。例如:filename = 'my_doc2vec_model'
initial_model.save(filename)请注意,这样的保存可能会分散在几个相关的文件上,所有这些文件都是从您提供的相同字符串开始的,这些字符串应该放在一起。(也就是说,在上面的代码之后,确保将以字符串'my_doc2vec_model'开头的任何和所有文件放在一起。)
然后通过调用预期模型类上的.load()重新加载:
reloaded_model = Doc2Vec.load(filename)另外:您的Doc2Vec代码显示了许多不好的做法。使用如此低的min_count=1几乎总是一个坏主意,用这种算法来减缓训练和恶化结果。在您自己的循环中多次调用alpha,自己减少.train(),就是不必要的复杂和易出错。无论哪种模板/教程认为这种方法可能是不好的。
https://stackoverflow.com/questions/71252330
复制相似问题