我使用tensorflow的estimator.export_saved_model方法导出了自定义估算器。我的问题是如何正确将MetaGraphDef导入新会话并将其用于预测或投放?我正在使用1.14版,并且已经获得tf.contrib.predictor.from_saved_model(model_directory)的运行,如下所示:
model_directory = b'final_model\\Run_20191006011340model2\\1570661762'
predict_fn = tf.contrib.predictor.from_saved_model(model_directory)
input_eie = _encode_input_transmitter_fn_v1(document,
text_features=False,
list_size=180)
prediction = predict_fn(
{'inputs' : [input_eie]})
但是,此方法已弃用。
我读了一个博客,其中用户将MetaGraphDef加载到默认图形中,并使用feed dict按名称抓取输出张量:
with tf.Session(graph=graph_v1) as sess:
# MetaGraphDef returned
model_import = tf.saved_model.load(sess, ['serve'], model_directory)
outputs_v1 = sess.run('groupwise_dnn_v2/accumulate_scores/div_no_nan:0',
feed_dict=input_feed_dict)
从文档和other SO answers中看来,这等效于使用tf.train.Saver并将元图导入会话中。另外,tf.saved_model.load_v2的文档说,导出的save_model将:
这些SavedModels将具有与其对应的功能
.signatures
属性中的签名,但也具有.prune
允许您为新子图提取函数的方法。这个 等效于导入SavedModel并命名提要和
从TensorFlow 1.x获取会话。
那么..我的方法是否可以接受,或者有更简单的方法来做到这一点?似乎2.0版比1.14版更加简化。
此外,如果我想恢复多个save_models以进行服务,将每个模型导入到自己的图形中并在需要预测的时候在会话中调用输出张量是否正确? ::
graph_v1 = tf.Graph()
with tf.Session(graph=graph_v1) as sess:
model_import_v1 = tf.saved_model.load(sess, ['serve'], model_directory_v1)
outputs_v1 = sess.run('groupwise_dnn_v2/accumulate_scores/div_no_nan:0',
feed_dict=input_feed_dict_v1)
graph_v2 = tf.Graph()
with tf.Session(graph=graph_v2) as sess:
model_import_v2 = tf.saved_model.load(sess, ['serve'], model_directory_v2)
outputs_v2 = sess.run('groupwise_dnn_v2/accumulate_scores/div_no_nan:0',
feed_dict=input_feed_dict_v2)
P.S。以上所有方法均有效;我只想知道在1.14或2.0中执行此操作的最佳方法。