2017-02-02 6 views
0

私は、テンソルフローサービングを使用して再トレーニングされた開始グラフを提供しようとしています。再訓練のために、私はこれを使用していますexample。しかし、このグラフを変更してserving export codeと連動させる必要があります。テンソルフローイメージ再提供

提供tensorflowでいるので、あなたは、グラフの入力はこれで起動する必要があり、入力としてシリアル化された画像を受信します:

serialized_tf_example = tf.placeholder(tf.string, name='tf_example') 
feature_configs = { 
    'image/encoded': tf.FixedLenFeature(shape=[], dtype=tf.string), 
} 
tf_example = tf.parse_example(serialized_tf_example, feature_configs) 
jpegs = tf_example['image/encoded'] 
images = tf.map_fn(preprocess_image, jpegs, dtype=tf.float32) 

この画像テンソルは、再訓練開始グラフに入力してください。しかし、placeholder_with_input(再訓練コードで行われている)を使用して簡単に追加できるように、テンソルフローのグラフを別のグラフに前置することが可能かどうかは分かりません。

graph, bottleneck_tensor, jpeg_data_tensor, resized_image_tensor = (
    create_inception_graph()) 

理想的には、画像再訓練コードで、Iは、プレースホルダテンソル​​3210を受け取ります。このプレースホルダーテンソルjpeg_data_tensorにテンソルimagesを追加して、エクスポーターを使用してテンソルフローを使用して提供できるように単一グラフとしてエクスポートする必要があります。しかし、私はそれを行うテンソルフロー命令はありません。この方法とは別の方法がありますか?それについて行くの

答えて

2

一つの方法は次のとおりです。

model_path = 'trained/export.pb' 
with tf.Graph().as_default(): 
    with tf.Session() as sess:  
     with gfile.FastGFile(model_path, 'rb') as f: 
      graph_def = tf.GraphDef() 
      graph_def.ParseFromString(f.read()) 
      # Your prepending ops here 
      images_placeholder = tf.placeholder(tf.string, name='tf_example') 
      ... 
      images = tf.map_fn(preprocess_image, jpegs, dtype=tf.float32) 
      tf.import_graph_def(graph_def, name='inception', input_map={'ResizeBilinear:0': images}) 

お知らせ特にinput_map引数。 ResizeBilinear:0はあなたが必要とする操作の正しい名前そうではありません - あなたはでOPSを一覧表示することができます。私は、これは完全な答えは、おそらくない最も効率的ではありません実現うまくいけば、それはあなたが始めることができ

[n.name for n in tf.get_default_graph().as_graph_def().node] 

。ちょうどヘッドアップ、this blogpostもあります。

0

モデルを再トレーニングしているので、私はそのモデルがProtobufだと仮定していますが、Pythonオブジェクトにロードして、バッチを処理するカスタム関数またはアトミックな操作です。

あなたのグラフの質問には、私が知っている限り、tf.Graph()オブジェクトをロードするときにそのオブジェクトでしか作業していないので、他のグラフでは動作しません。既存のInception-V3グラフを拡張した別のグラフを作成すると、簡単にカスタムグラフの計算グラフに追加することができます。

関連する問題