我有一个形状的张量[x, y]
并且我想用行标准差减去平均值和除数(即我想对每个行)。 TensorFlow中最有效的方法是什么?TensorFlow中的有效方法是通过每行的标准偏差减去平均值和除数
当然我可以通过行循环如下:
new_tensor = [i - tf.reduce_mean(i) for i in old_tensor]
...减去平均值,然后做一些类似找到它的标准差和分裂的东西,但这是最好的办法在TensorFlow中做?
我有一个形状的张量[x, y]
并且我想用行标准差减去平均值和除数(即我想对每个行)。 TensorFlow中最有效的方法是什么?TensorFlow中的有效方法是通过每行的标准偏差减去平均值和除数
当然我可以通过行循环如下:
new_tensor = [i - tf.reduce_mean(i) for i in old_tensor]
...减去平均值,然后做一些类似找到它的标准差和分裂的东西,但这是最好的办法在TensorFlow中做?
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你的情况)
mean, var = tf.nn.moments(old_tensor, [1], keep_dims=True)
new_tensor = tf.div(tf.subtract(old_tensor, mean), tf.sqrt(var))