从tf.reduce_sum()探究axis的方向

执行tf.reduce_sum(tensor)后,tensor会降维,比如本来是3维张量,会变成2维张量。
三维张量的方向为:

重点考虑下4维张量,首先定义一个4维张量,由2个3维张量组成,每个3维张量形状为3行4列深度为2。

import numpy as np
import tensorflow as tf

const4 = tf.constant(np.arange(0, 48, 1).reshape(2, 3, 4, 2))

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(const4))

输出结果:

[[[[ 0  1]
   [ 2  3]
   [ 4  5]
   [ 6  7]]

  [[ 8  9]
   [10 11]
   [12 13]
   [14 15]]

  [[16 17]
   [18 19]
   [20 21]
   [22 23]]]


 [[[24 25]
   [26 27]
   [28 29]
   [30 31]]

  [[32 33]
   [34 35]
   [36 37]
   [38 39]]

  [[40 41]
   [42 43]
   [44 45]
   [46 47]]]]

几何图可以如下示意:


axis=0

# shape = (2, 3, 4, 2)
sum1 = tf.reduce_sum(const4, axis=0)

axis=1

# shape = (2, 3, 4, 2)
sum1 = tf.reduce_sum(const4, axis=1)

axis=2

# shape = (2, 3, 4, 2)
sum1 = tf.reduce_sum(const4, axis=2)

axis=3

# shape = (2, 3, 4, 2)
sum1 = tf.reduce_sum(const4, axis=3)

小结:

1、shape属性中的每个维度分别与axis=0axis=1axis=2axis=3……对应。
2、对于3维张量,shape = (hights, weights, depths);对于4维张量,shape = (channels, hights, weights, depths)
3、shape降维规律:假设原本shape=(a,b,c,d),当axis=0,则变化后的shape_new=(b,c,d);当axis=1,则变化后的shape_new=(a,c,d);当axis=2,则变化后的shape_new=(a,b,d);当axis=3,则变化后的shape_new=(a,b,c)。
4、执行tf.reduce_sum()时,在对应的方向进行相加,然后按照对应的方向把获得的几个张量进行组合,然后在空间中旋转使得维度满足(3)中的规律。
5、关键是掌握axis的方向(1、2)和输出的维度(3),对于(4)中如何旋转的可以忽略。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容