2017-06-02 228 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

相關問題