2017-02-16 4 views
0

私は、Pythonを使ってGPU上のグラフを訓練して、C++プロセスからグラフを読み込もうとしています。train.import_meta_graph clear_devices引数のC++に相当しますか?

status = ReadBinaryProto(Env::Default(), "model.pb", &graph_def); 
session->Create(graph_def); 

は、それから私は、エラーメッセージが表示されました

「という仕様に一致するデバイスがこのプロセスに登録されていないので...ノードにデバイスを割り当てることができません。使用可能なデバイスを:/仕事を:ローカルホスト/レプリカ:0 /タスク:0/cpu:0 "

python train.import_meta_graph APIにはclear_devices引数がありますが、それはC++ APIと同等ですか?

グラフを読み込むために、私はWindows上で-Dtensorflow_ENABLE_GPU = ONのCMakeを使用して構築されたTensorflorを使用していますので、私のvcxprojにはGOOGLE_CUDAの定義があります。

私はTensorflow, restore variables in a specific deviceを読んだことがありますが、それはPython APIのみです。

答えて

0

とにかくグラフをPythonからエクスポートしているとすれば、デバイスをクリアしてグラフをエクスポートできますか?ような何か:また

meta_graph = tf.train.export_meta_graph() 
with tf.Graph().as_default(): 
    tf.train.import_meta_graph(meta_graph, clear_devices=True) 
    # Export the GraphDef now 
    with open('/tmp/model.pb', 'w') as f: 
     f.write(tf.get_default_graph().as_graph_def().SerializeToString()) 

、あなたがグラフ内のすべてのノードのdeviceフィールドをクリアすることにより、C++でのclear_devices=Trueの動作を複製することができます。ような何か:

status = ReadBinaryProto(Env::Default(), "model.pb", &graph_def); 
for (int n = 0; n < graph_def.node_size(); ++n) { 
    graph_def.mutable_node(n)->clear_device(); 
} 
session->Create(graph_def); 

しかし、それはGraphDef sは壊れやすいかもしれないフレームワークによって消費されているかの内部の詳細に依存しているので、私はそれに対して助言します。

+0

私はpythonでexport_meta_graph()ではなくtrain.Saver()を使用していますが、C++でデバイスをクリアし、そのグラフを使用してSession :: Create()を成功させました!ありがとうございました! – Jay

関連する問題