2017-02-28 7 views
0

残念ながら、バッチ処理をサポートしていないノードがいくつか残っています(カスタム操作は未完成です)。sess.runを呼び出す複数のスレッドを持つことができました。 feed_dictを介したデータ。私は現在、キューを適切に活用するためにデータをtfrecordsに変換しましたが、複数のスレッドがsess.run()を呼び出すだけではなく、複数のインスタンスを同時に実行する方法を見つけることができません。私は、テンソルフローの開発者がどこかでもっと「ピジョンソニック」な方法を作り出したと思っていますが、まだ見つけていません。テンソルフロー内でこれをどうやって行うのですか?Tensorflowバッチ処理を行わない複数のサンプル

編集:データのバッチ処理を行っても、私の計算はCPUで半分、gpuで半分を費やすので、バッチ処理にかかわらず、もう一方は半分の時間待機します。私はグラフを非同期にその空間を埋めるために複数のサンプルを訓練させたいと思っています。

編集2:私は上記のテキストを読んでいない人のためにここに擬似コードを入れなければならないと思います。

import tensorflow as tf 

resultOfCPUCalculation = someCPUOnlyOP(inputData)\\does not support batching 
gpuResults = aBunchOfGPUOps(resultOfCPUCalculation) 
with tf.Session() as sess: 
    sess.run([gpuResults]) 
    //only uses 1 cpu core, and the gpu is idle while it's doing it's thing. 

私は、すぐにCPU OPが行われているように、それは別のサンプルで開始し、「パイプライン」の方法で、これを実行したいと思います。

答えて

0
import tensorflow as tf 

input_example = get_input_example() 
cpu_output = some_cpu_only_op(input_example) 

cpu_output_batch = tf.train.batch(input_example, batch_size, num_threads) 
gpu_output_batch = a_bunch_of_gpu_ops(cpu_output_batch) 

with tf.Session() as sess: 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 

    for i in range(num_train_steps): 
     output_values = sess.run(gpu_output_batch) 
     do_stuff_with(output_values) 

    coord.request_stop() 
    coord.join(threads) 

input_exampleは、キューによって供給される必要があります。

+0

申し訳ありません。私はより明確にすべきだった。私がこれらの演算子がバッチ処理をサポートしていないと言うとき、実際のモデルでは、一番外側の次元がバッチである4Dテンソルではなく、単一の3Dテンソルを入力として受け取ります。これは、バッチ処理がテンソルフローで動作する方法を根本的に誤解しない限り、バッチを使用できないことを意味します。だから、代わりにグラフを並行して実行するだけです。 –

+0

また、私はそれを考えて、バッチ処理は実際には、バッチ処理であっても、グラフの最初の半分がCPUに限られているので、何とかして一度に複数の別々の計算をしたいからです。現時点では、いずれかのCPUが、CPUを待っているGPU、またはGPUを待っている、私は彼らが待っている間、彼らは仕事をしたいと思います。この情報を追加するために質問を編集します。 –

+0

また、以前はpy_funcを見たことがありません。どのように私はそれを逃したのだろうか。それは私がすでに理解しているものをずっと簡単に作ったでしょう。 –

関連する問題