2016-08-01 3 views
3

私はテンソル形状[x, y]を持っています。平均を減算し、標準偏差で行ごとに除算したいと思います。行)。 TensorFlowでこれを行う最も効率的な方法は何ですか?TensorFlowの効率的な方法平均を減算し、各行の標準失効によって除算する

new_tensor = [i - tf.reduce_mean(i) for i in old_tensor] 

は...平均値を減算し、それによって、標準偏差と分裂を見つけることが似た何かをするが、これはするための最良の方法である:もちろん

私は、行をループし、次のことができますようTensorFlowでやりますか?

答えて

5

オペレータはTensorFlow tf.sub()tf.div()の演算子をサポートしているため、すべての行を繰り返し処理する必要はありません。のは、平均を考えると、運動として標準偏差を残す:

old_tensor = ...           # shape = (x, y) 
mean = tf.reduce_mean(old_tensor, 1, keep_dims=True)  # shape = (x, 1)      

stdev = ...            # shape = (x,) 
stdev = tf.expand_dims(stdev, 1)       # shape = (x, 1) 

new_tensor = old_tensor - mean       # shape = (x, y) 
new_tensor = old_tensor/stdev       # shape = (x, y) 

減算と除算演算子は、暗黙のうちに他の引数、(x, y)の形状に合わせて列次元に沿った形状(x, 1)のテンソルを放送します。放送の仕組みの詳細については、NumPy documentation on the topic(TensorFlowはNumPy放送のセマンティクスを実装しています)を参照してください。

6
  1. 計算平均とVARの、すなわち形状であるモーメント軸1(あなたのケースでY)に沿って寸法を保つ、(LEN(x)は、1)
  2. 減算は、平均値と標準偏差(すなわち平方根で除算分散)
mean, var = tf.nn.moments(old_tensor, [1], keep_dims=True) 
new_tensor = tf.div(tf.subtract(old_tensor, mean), tf.sqrt(var)) 
関連する問題