reduce_sum()如何在tensorflow中工作?

Bha*_*yal 22 python reduce multidimensional-array tensorflow 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.
Run Code Online (Sandbox Code Playgroud)

Dmi*_*kiy 40

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

1 1 1
1 1 1
Run Code Online (Sandbox Code Playgroud)

通过做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(沿着行减少,然后减少结果数组).

  • 在此示例中,“tf.reduce_sum(x)”也相当于“tf.reduce_sum(x, [0, 1])”。换句话说,如果您不指定要减少的维度,则所有维度都会减少。 (4认同)

Max*_*xim 22

输入是二维张量:

1 1 1
1 1 1
Run Code Online (Sandbox Code Playgroud)

张量流中的0轴是行,1轴是列.沿0轴的总和将产生1-D长度的张量3,每个元素是每列的总和.结果就是这样[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
Run Code Online (Sandbox Code Playgroud)

如您所见,输出是相同的.


Enr*_*uño 14

为了更好地理解发生了什么,我将更改值,结果是自我解释的

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

  • 使用非基本数字是一种很好的方法 (3认同)

asa*_*kin 9

这样想,轴表示将被淘汰的维度。所以对于第一个 case axis 0,所以如果你通过这个维度(2 个条目),它们将全部折叠为 1。因此它将如下所示:

result = [[1,1,1] + [1,1,1]] = [2,2,2] 
Run Code Online (Sandbox Code Playgroud)

所以你删除了维度0

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

result = [[1,1] + [1,1] + [1,1]] = [3,3]
Run Code Online (Sandbox Code Playgroud)

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

result1 = [2,2,2]
result_final = 2 + 2 + 2 = 6 
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!