reduce_sum()如何在tensorflow中工作?

时间:2017-11-07 12:12:20

标签: python tensorflow multidimensional-array reduce tensor

我正在学习tensorflow,我从tensorflow网站上获取了以下代码。根据我的理解,axis = 0表示行,axis = 1表示列。

他们如何获得评论中提到的输出?我根据我对##的想法提到了输出。

import tensorflow as tf

x = tf.constant([[1, 1, 1], [1, 1, 1]])
tf.reduce_sum(x, 0)  # [2, 2, 2] ## [3, 3]
tf.reduce_sum(x, 1)  # [3, 3] ##[2, 2, 2]
tf.reduce_sum(x, [0, 1])  # 6 ## Didn't understood at all.

6 个答案:

答案 0 :(得分:24)

x的形状为(2, 3)(两行三列):

1 1 1
1 1 1

通过执行tf.reduce_sum(x, 0),张量沿第一维(行)减少,因此结果为[1, 1, 1] + [1, 1, 1] = [2, 2, 2]

通过执行tf.reduce_sum(x, 1),张量沿第二维(列)减少,因此结果为[1, 1] + [1, 1] + [1, 1] = [3, 3]

通过执行tf.reduce_sum(x, [0, 1]),张量沿着两个维度(行和列)减少,因此结果为1 + 1 + 1 + 1 + 1 + 1 = 6或等效[1, 1, 1] + [1, 1, 1] = [2, 2, 2],然后2 + 2 + 2 = 6(沿行减少,然后减少结果数组。)

答案 1 :(得分:19)

输入是2-D张量:

1 1 1
1 1 1

tensorflow中的0轴是行,1轴是列。沿着0轴的总和将产生长度为3的1-D张量,每个元素是每列总和。结果是[2, 2, 2]。对于行也是如此。

在这种情况下,两个轴的总和是张量中所有值的总和,即6

的比较:

a = np.array([[1, 1, 1], [1, 1, 1]])
np.sum(a, axis=0)       # [2 2 2] 
np.sum(a, axis=1)       # [3 3]
np.sum(a, axis=(0, 1))  # 6

如您所见,输出相同。

答案 2 :(得分:8)

为了更好地了解发生了什么,我将更改这些值,结果不言而喻

import tensorflow as tf

x = tf.constant([[1, 2, 4], [8, 16, 32]])
a = tf.reduce_sum(x, 0)  # [ 9 18 36]
b = tf.reduce_sum(x, 1)  # [ 7 56]
c = tf.reduce_sum(x, [0, 1])  # 63

with tf.Session() as sess:
  output_a = sess.run(a)
  print(output_a)
  output_b = sess.run(b)
  print(output_b)
  output_c = sess.run(c)
  print(output_c)

答案 3 :(得分:4)

这样想,轴表示将被消除的尺寸。因此,对于第一个案例轴0,所以如果你通过这个维度(2个条目),它们将全部崩溃为1.因此它将如下:

结果= [[1,1,1] + [1,1,1]] = [2,2,2]

所以你删除了维度0

现在,对于第二种情况,您将折叠轴1(或列),因此:

结果= [[1,1] + [1,1] + [1,1]] = [2,2]

最后一种情况是你按照括号中的顺序继续折叠。换句话说,首先你消除raws然后消除列:

result1 = [2,2,2]

result_final = 2 + 2 +2 = 6

希望这有帮助!

答案 4 :(得分:1)

x具有2行3列,例如:

1 1 1
1 1 1

沿行减少(tf.reduce_sum(x, 0))意味着您要从底部和顶部挤压,以便使两个单独的行成为一行。它将变为[2,2,2]。

沿着列(tf.reduce_sum(x, 1))缩小意味着您从左右挤压,以便3个单独的列成为1列,即[3,3]。

最后tf.reduce_sum(x, [0, 1])表示首先从底部和顶部挤压 (它将变为[2,2,2]),然后从左右挤压[2,2,2],使其变为6。

答案 5 :(得分:0)

tf.reduce_sum(x, [0, 1]) 

命令将首先计算轴= 0(行方向)上的总和,然后将计算轴= 1(列方向)上的总和

例如

 x = tf.constant([[1, 1, 1], [1, 1, 1]])

计算出轴上的总和= 0之后,您正在求和[2,2,2]。 在计算轴上的总和= 1之后,您将求和2 + 2 + 2。

最后,得到6作为输出。