2016-12-23 23 views
0

私はコードを高速化する方法を見つけようとしています。要するに、私は予測を取得し、並べ替えてランクを出力するようなものを使用する訓練されたモデルを持っています。TensorFlow Numpyを搭載した並列CPU

def predict(feed_dict, truth): 
    # Feed dict contains about 10K candidates to obtain scores 
    pred = self.sess.run([self.mdl.predict_op], feed_dict) 
    pred = np.array(pred) 
    # With the scores, I sort them by likelihood 
    sort = np.argsort(pred)[::-1] 
    # I find the rank of the ground truth 
    rank = np.where(sort==truth)[0][0] + 1 
    return rank 

しかし、このプロセスは非常に遅いです。私は約10Kのテストサンプルを持っています。私は、マルチCPU/GPUのサポートはテンソルフローオペレーションでのみ利用可能ですが、セッションはPythonの標準マルチプロセッシングライブラリではうまく動作しないと考えています。

マルチプロセッシングでこれをスピードアップする方法はありますか?あるいは、それをTFの計算グラフの一部として実装する必要がありますか?

ありがとうございます!

+0

遅いどの部分? –

+0

ところで、 'tf.nn.top_k(pred)[1]'は 'np.argsort'行と同じです。すべてをTFグラフに変換すると、マルチプロセスは必要ありません。並列の 'session.run'呼び出しは、同じプロセス内の異なるPythonスレッドから開始できます。 –

+0

遅いのは、私がこの10K +回を有効なセットまたはテストセットのいずれかに呼び出さなければならないという事実から来ています。 – op10no4

答えて

3

あなたはTensorFlowグラフに全部を翻訳することができます

pred_op = tf.constant([1,2,0]) 
truth = [0, 1, 2] 
sess = tf.Session() 
sort = tf.nn.top_k(pred_op)[1] # same as np.argsort(x)[::-1] 
rank = tf.where(tf.equal(sort,truth))[0][0] + 1 
print(sess.run(rank)) # => 2 
関連する問題