我想保存我的张量流模型并在以后还原以进行预测,然后使用估计器的export_savedmodel
保存该模型。
对于文档,我使用serving_input_receiver_fn
来指定输入。我也想使用export_outputs
来指定输出,但是我不理解预测和export_outputs之间的区别?
if mode == tf.estimator.ModeKeys.PREDICT:
export_outputs = {
'predict_output': tf.estimator.export.PredictOutput({
'class_ids': predicted_classes[:, tf.newaxis],
'probabilities': tf.nn.softmax(logits),
'logits': logits
})
}
predictions = {
'class': predicted_classes[:, tf.newaxis],
'prob': tf.nn.softmax(logits),
'logits': logits,
}
return tf.estimator.EstimatorSpec(mode, predictions=predictions, export_outputs=export_outputs)
另一个问题是如何使用保存的pb模型在会话中进行预测?
with tf.Session(graph=tf.Graph()) as sess:
model_path = 'model/1535016490'
tf.saved_model.loader.load(sess, [tf.saved_model.tag_constants.SERVING], model_path)
inputs = sess.graph.get_tensor_by_name('input_example:0')
# how to get the output tensor?
# outputs = sess.graph.get_tensor_by_name()
res = sess.run([outputs], feed_dict={inputs: examples})
我可以使用tensorflow.contrib.predictor
来获得一些结果,但是我希望我们团队的通用方法将使用C ++恢复模型。所以我认为获取张量并在会话中运行它们也许是我想要的方法?
from tensorflow.contrib import predictor
predict_fn = predictor.from_saved_model(
export_dir='model/1535012949',
signature_def_key='predict_output',
tags=tf.saved_model.tag_constants.SERVING
)
predictions = predict_fn({'examples': examples})
非常感谢您的帮助!
答案 0 :(得分:0)
对于第一个问题,我不是100%肯定的,但是我相信在tf.session()中调用estimator.predict(...)时会使用预测,而在服务期间会使用export_outputs。我的意思是,如果您有一个docker tensorflow / serving或其他正在运行并加载了已保存模型的服务器,并使用输入进行查询,则响应将基于您的export_outputs定义。
对不起,我对您的第二个问题不清楚。在这一点上,保存张量流模型的方法有很多,这很难说。我想看一下save and restore的官方文档,并根据您如何保存模型以及是否使用估算器来找到建议的还原方法。
此外,在#tensorflow的首页上的此question可能会有用。
祝你好运~~
答案 1 :(得分:0)
对于那些登陆这里以寻找有关export_outputs和预测的信息的人,请确保也检查this question。