2017-05-06 4 views
3

tensorflow에서 목록의 중간 값을 어떻게 계산합니까? Tensorflow 중간 값

node = tf.median(X) 

처럼 X는 NumPy와에서 자리
, 내가 직접 중간 값을 얻기 위해 np.median 사용할 수 있습니다. tensorflow에서 numpy 연산을 어떻게 사용할 수 있습니까?

답변

3

numpy 함수를 사용할 필요가 없습니다.

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] 

X가 이미 벡터 인 경우 재 형성을 건너 뛸 수 있습니다.

+0

도움 주셔서 감사합니다. 정의 된 X는 입력 데이터의 크기가 알려지지 않았기 때문에 [None, 5] 행렬입니다. 이 문제를 어떻게 알 수 있습니까? –

+0

@ YingchaoXiong 총 행렬 또는 치수 중 하나의 중간 값을 계산 하시겠습니까? – 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가 단점이 있다고 생각했다 : 그것은 텐서 계산이 아니기 때문에 CPU에서 실행되어야한다. 따라서 큰 ndarray의 경우 메모리가 많이 소모되어 성능이 저하 될 수 있습니다. –

1

tensorflow으로 배열의 중앙값을 계산할 때는 quantile 함수를 사용할 수 있습니다. 이는 50 % quantile이 median이기 때문입니다.

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) 

이 코드 않았습니다 interpolation 파라미터 lower, higher 또는 nearest 샘플 값으로 결과를 근사 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')에 해당합니다.