将使用tf.estimator训练和保存的模型转换为.pb

时间:2018-03-05 11:10:06

标签: tensorflow tensorflow-serving tensorflow-estimator

我有一个用tf.estimator训练的模型,它在训练后导出如下

 serving_input_fn = tf.estimator.export.build_raw_serving_input_receiver_fn(
feature_placeholders)
 classifier.export_savedmodel(
r'./path/to/model/trainedModel', serving_input_fn)

这给了我一个saved_model.pb和一个包含权重的文件夹作为.data文件。我可以使用

重新加载保存的模型
predictor = tf.contrib.predictor.from_saved_model(r'./path/to/model/trainedModel')

我想在Android上运行此模型,并且要求模型采用.pb格式。如何冻结这个预测器以便在android平台上使用?

1 个答案:

答案 0 :(得分:0)

我没有部署到Android,所以您可能需要稍微自定义一些步骤,但这就是我这样做的方法:

  1. 使用参数y = -10 max(y, 0) -> 0 min(0, 10) -> 0 answer = 0 # -10 becomes 0 y = 3 max(y, 0) -> 3 min(3, 10) -> 3 answer = 3 # 3 becomes 3 y = 20 max(y, 0) -> 20 min(20, 10) -> 10 answer = 10 # 20 becomes 10 <tensorflow_root_installation>/python/tools/freeze_graph.py运行--input_saved_model_dir=<path_to_the_savedmodel_directory>(您可以从--output_node_names=<full_name_of_the_output_node>获取输出节点的名称,但这不是最舒适的方式),graph.pbtxt

  2. (可选)使用足够的参数运行--output_graph=frozen_model.pb。或者,您可以查找Graph Transform Tool并有选择地应用优化。

  3. 在步骤1结束时,您已经拥有一个没有变量的冻结模型,然后您可以将其部署到Android。