reduce_sum()在tensorflow中如何工作?
python
tensor
tensorflow
6
0

我正在学习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.
参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

输入是二维张量:

1 1 1
1 1 1

tensorflow中的0轴是行,1轴是列。 沿着0轴的总和将产生长度为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

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

收藏
评论

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

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)
收藏
评论

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, 0) [1, 1, 1] + [1, 1, 1] = [2, 2, 2] tf.reduce_sum(x, 0) [1, 1, 1] + [1, 1, 1] = [2, 2, 2] 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 (沿行减少,然后减少结果数组)。

收藏
评论

这样想,轴表示将要消除的尺寸。因此,对于第一种情况下的轴0 ,因此,如果您经过此维度(2个条目),它们将全部折叠为1。因此,它将如下所示:

result = [[1,1,1] + [1,1,1]] = [2,2,2] 

因此,您删除了尺寸0

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

result = [[1,1] + [1,1] + [1,1]] = [3,3]

最后一种情况是您按照方括号中的指示不断折叠。换句话说,首先消除行,然后消除列:

result1 = [2,2,2]
result_final = 2 + 2 + 2 = 6 

希望这可以帮助!

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号