2017-07-17 6 views
1

私の意見では、numpy関数bincountは非常に便利で使いやすいので、私は自然にTensorFlowでアナログ関数を使用します。最近、私は残念ながらtf.bincountにGPUのサポートがないことを学びました(hereを読むことができます)。 TensorFlow GPUを使用して効率的に効率的に重み付きヒストグラムを作成する方法はありますか?Tensorflow:tf.bincountなしで重み付きヒストグラムを作成する方法はありますか?

sess = tf.Session() 

values = tf.random_uniform((1,50),10,20,dtype = tf.int32) 
weights = tf.random_uniform((1,50),0,1,dtype = tf.float32) 

counts = tf.bincount(values, weights = weights) 

histogram = sess.run(counts) 
print(histogram) 

答えて

1
ekelsen on GitHub

によって示唆されるように、tf.bincountに効率的かつGPUサポートの代替は、tf.unsorted_segment_sumです。 documentationで読むことができるように、dataのような重みを持つ関数を使用することができます。値はsegments_idsです。 3番目の引数num_segmentsは、bincount返されたヒストグラムのサイズ以上でなければなりません(前回のヒストグラムの最後のものの後にゼロ要素しかない場合)。上記の私の例では、それは次のようになります。

sess = tf.Session() 

values = tf.random_uniform((1,50),10,20,dtype = tf.int32) 
weights = tf.random_uniform((1,50),0,1,dtype = tf.float32) 
bins = 50 
counts = tf.unsorted_segment_sum(weights, values, bins) 

histogram = sess.run(counts) 
print(histogram) 

と出力:

[ 0.   0.   0.   0.   0.   
    0.   0.   0.   0.   0.   
    2.92621088 1.12118244 2.79792929 0.96016133 2.75781202 
    2.55233836 2.71923089 0.75750649 2.84039998 3.41356659 
    0.   0.   0.   0.   0.   
    0.   0.   0.   0.   0.  ] 
関連する問題