2017-06-02 229 views
0

我一直在关注我训练过的模型上的TensorFlow for Poets 2 codelab,并创建了一个嵌入了冻结的量化图权重。它被捕获在一个文件中 - 比如说my_quant_graph.pb将图表原型(pb/pbtxt)转换为SavedModel以用于TensorFlow Serving或云ML引擎

由于我可以使用该图进行TensorFlow Android inference library的推理,所以我认为我可以对Cloud ML Engine做同样的工作,但它似乎只适用于SavedModel模型。

如何简单地将单个pb文件中的冻结/量化图形转换为ML引擎使用?

+0

见https://stackoverflow.com/a/44292448/1399222 – rhaertel80

回答

2

事实证明,一个SavedModel提供了一些额外的信息围绕一个保存的图形。假设冻结图不需要资产,那么它只需要指定的服务签名。

下面是我运行的python代码,将我的图转换为Cloud ML引擎接受的格式。注意我只有一对输入/输出张量。

import tensorflow as tf 
from tensorflow.python.saved_model import signature_constants 
from tensorflow.python.saved_model import tag_constants 

export_dir = './saved' 
graph_pb = 'my_quant_graph.pb' 

builder = tf.saved_model.builder.SavedModelBuilder(export_dir) 

with tf.gfile.GFile(graph_pb, "rb") as f: 
    graph_def = tf.GraphDef() 
    graph_def.ParseFromString(f.read()) 

sigs = {} 

with tf.Session(graph=tf.Graph()) as sess: 
    # name="" is important to ensure we don't get spurious prefixing 
    tf.import_graph_def(graph_def, name="") 
    g = tf.get_default_graph() 
    inp = g.get_tensor_by_name("real_A_and_B_images:0") 
    out = g.get_tensor_by_name("generator/Tanh:0") 

    sigs[signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY] = \ 
     tf.saved_model.signature_def_utils.predict_signature_def(
      {"in": inp}, {"out": out}) 

    builder.add_meta_graph_and_variables(sess, 
             [tag_constants.SERVING], 
             signature_def_map=sigs) 

builder.save() 
+0

我试图做到这一点,但有人给我检查点目录,而不代码。好像我需要输入和输出节点的名称。有没有办法从检查点目录中的信息获取输入和输出节点? – blueether

+1

是的使用检查检查点工具:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/inspect_checkpoint.py –

+1

感谢您的快速回复。当我跑它时,我得到了:'python inspect_checkpoint.py --file_name = checkpoint 2017-07-14 07:38:02.585722:W tensorflow/core/util/tensor_slice_reader.cc:95]无法打开./checkpoint:Data损失:不是sstable(坏幻数):也许你的文件是不同的文件格式,你需要使用不同的恢复操作符? 无法打开表文件./checkpoint:数据丢失:不是sstable(坏的幻数):或许你的文件是不同的文件格式,你需要使用不同的恢复操作符?' – blueether

相关问题