TensorFlow中的有效方法减去每行的标准deivation的均值和除法

pum*_*314 4 tensorflow

我有一个形状的张量,[x, y]我想减去平均值并除以行标准差(即我想为每一行做).在TensorFlow中执行此操作的最有效方法是什么?

当然我可以循环遍历行,如下所示:

new_tensor = [i - tf.reduce_mean(i) for i in old_tensor]
Run Code Online (Sandbox Code Playgroud)

...减去均值,然后做类似的事情找到标准差并除以它,但这是在TensorFlow中做到这一点的最佳方法吗?

giz*_*ole 8

  1. 沿轴1计算力矩(在你的情况下为y)并保持尺寸,即均值和var的形状是(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))
Run Code Online (Sandbox Code Playgroud)


mrr*_*rry 6

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)
Run Code Online (Sandbox Code Playgroud)

减法和除法运算符隐式地(x, 1)沿列维度广播一个形状的张量,以匹配另一个参数的形状,(x, y).有关广播如何工作的更多详细信息,请参阅有关该主题NumPy文档(TensorFlow实现NumPy广播语义).