2016-08-01 72 views
3

我有一个形状的张量[x, y]并且我想用行标准差减去平均值和除数(即我想对每个行)。 TensorFlow中最有效的方法是什么?TensorFlow中的有效方法是通过每行的标准偏差减去平均值和除数

当然我可以通过行循环如下:

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

...减去平均值,然后做一些类似找到它的标准差和分裂的东西,但这是最好的办法在TensorFlow中做?

回答

5

The TensorFlow tf.sub() and 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, 1)沿列维度的张量相匹配的其他参数的形状,(x, y)。有关广播如何工作的详细信息,请参阅NumPy documentation on the topic(TensorFlow实现NumPy广播语义)。沿轴1(Y你的情况)

6
  1. 计算的时刻,保持尺寸,即平均的形状和变量被(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)) 
相关问题