2017-05-06 48 views
3

テンソルフローのリストの中央値はどのようにして計算できますか? Tensorflowの中央値

node = tf.median(X) 

同様にXがnumpyのではプレースホルダ
ですが、私は直接、中央値を取得するためにnp.median使用することができます。テンソルフローでnumpy演算を使用するにはどうすればよいですか?

答えて

3

numpy関数を使用する必要はありません。 Xがすでに整形をスキップすることができますベクトルの場合

def get_median(v): 
    v = tf.reshape(v, [-1]) 
    m = v.get_shape()[0]//2 
    return tf.nn.top_k(v, m).values[m-1] 

を:あなたが使用してtensorflow内の中央値を計算することができます。

+0

ご協力ありがとうございます。定義されたXは、入力データのサイズが未知であるため、[None、5]行列です。どうすればこの問題を把握できますか? –

+0

@ YingchaoXiong合計のマトリックスの中央値または次元の1つに沿って中央値を計算しますか? – BlueSun

+0

寸法に沿って。私はこの問題を理解していた。新しい問題は、行列のサイズ、または関数内のmの値を定義する方法です。プレースホルダのサイズは[なし、5]です。トレーニングパートでは、バッチサイズを10([10,5])に設定し、予測はサイズを[1,5]に設定します。フィードのサイズに基づいてmの値を変更するにはどうすればよいですか?どうもありがとうございます!!! –

1

現在TFにはno median functionが存在します。 TFでnumpy操作を使用する唯一の方法は、グラフを実行した後です。

import tensorflow as tf 
import numpy as np 

a = tf.random_uniform(shape=(5, 5)) 

with tf.Session() as sess: 
    np_matrix = sess.run(a) 
    print np.median(np_matrix) 
+0

私はnumpyには1つの欠点があると考えました。それは、それがテンソル計算ではないためCPUで実行する必要があります。したがって、大規模なndarrayの場合、残念ながら多くのメモリが消費され、パフォーマンスが低下します。 –

1

tensorflowで配列の中央値を計算するには、quantileの関数を使用できます。これは、50%分位がmedianであるためです。 interpolationパラメータはlowerhigher又はnearestサンプル値に結果を近似するため

import tensorflow as tf 
import numpy as np 

np.random.seed(0) 
x = np.random.normal(3.0, .1, 100) 

median = tf.contrib.distributions.percentile(x, 50.0) 

tf.Session().run(median) 

このコードは、np.medianの同じ動作をしていません。

あなたが使用することができ、同じ動作をする場合:そのほかに

median = tf.contrib.distributions.percentile(x, 50.0, interpolation='lower') 
median += tf.contrib.distributions.percentile(x, 50.0, interpolation='higher') 
median /= 2. 
tf.Session().run(median) 

、上記のコードはnp.percentile(x, 50, interpolation='midpoint')と同等です。