2017-02-07 4 views
1

私の質問は、グラフを永続化することに関するthis one hereと関連しています。特定の部分のグラフをエクスポートすることは可能でしょうか? TensorFlow 0.12以降を使用して、指定されたスコープでプレフィックスされたサブグラフ。TensorFlowグラフの一部をフリーズ/エクスポートする

私は現在、私はその後、tf.import_graph_def()を使用してバックロードすることができプロトコルバッファファイルに(「フリーズ」)をエクスポートするグラフをtf.train.import_meta_graph()graph_util.convert_variables_to_constants()tf.train.write_graph()の組み合わせを使用しています。エクスポート中に、どのノードがの出力の必要な出力と見なされるかを指定することができるので、上流のノードは破棄されませんが、インポート中はinput_mapを使用してグラフの特定の部分を他の操作に再配線できます。

このすべてが正常に動作しますが、それは不要入力の概念が欠落しているし、問題はそうすることによって、output_nodes全体上流、すなわち、すべての入力および前処理だけでなく、ファイルに書き込まれていることです関連する

現在、このようなエクスポートルックス:

output_nodes = ['subgraph/y', 'subgraph/dropout'] 

checkpoint = tf.train.latest_checkpoint(input_path) 
importer = tf.train.import_meta_graph(checkpoint + '.meta', clear_devices=True) 

graph = tf.get_default_graph() 
gd = graph.as_graph_def() 

with tf.Session() as sess: 
    importer.restore(sess, checkpoint) 
    output_graph_def = graph_util.\ 
     convert_variables_to_constants(sess, gd, output_nodes) 
    tf.train.write_graph(output_graph_def, 'dir', 'file.pb', as_text=False) 

このようなルックスのインポート中:

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

elems = tf.import_graph_def(
     graph_def, 
     input_map=None, 
     return_elements=output_nodes, 
     name='imported' 
    ) 

およびフィルタリング/または中または前に、私は必要としない部分を削除する方法はあります輸出ですか?明確にするために、私は読み込んだ後に無視することができることを知っていましたが、まずそれらを書き出すことはしません。ある時点でコレクションを使用することは役に立ちますか?

答えて

1

私の意見では、グラフ保存ツールを組み直す必要があります。

ベストプラクティスは、保存する変数のリストを作成し、セッション中に保存することです。その後、必要に応じてウェイトをリロードしてグラフを自由に変更することができます。アイデアのための

parameters = [] 
parameters += [wieghts, biases] 
... 
def load_weights(self, weight_file, sess): 
    weights = np.load(weight_file) 
    keys = sorted(weights.keys()) 
    for i, k in enumerate(keys): 
     print i, k, np.shape(weights[k]) 
     sess.run(self.parameters[i].assign(weights[k])) 

クレジットは、これまでダヴィFrossardのにhere

+0

感謝を行きます。たぶん私は何かが欠けているかもしれませんが、グラフを構築する方法を知っている必要はありませんか?私が望むのは、重みと操作の両方を含む単一の展開可能なファイルです(すべての前処理と後処理の部分は含まれません)。 – sunside

+0

私が見てきた唯一のことは、文字通りそのコードの部分を分離し、それでもtfで実行したければ、必要に応じてエクスポートできることです。私はあなたが提案したことを行うためのきれいな方法を見つけていません。たぶん誰か他の人がもっと良い方法を知っていて、私も知りたいのですが。 – Steven

関連する問題