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

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

从tf.reduce_sum()探究axis的方向_第1张图片

重点考虑下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]]]]

几何图可以如下示意:


从tf.reduce_sum()探究axis的方向_第2张图片

axis=0

# shape = (2, 3, 4, 2)
sum1 = tf.reduce_sum(const4, axis=0)
从tf.reduce_sum()探究axis的方向_第3张图片

axis=1

# shape = (2, 3, 4, 2)
sum1 = tf.reduce_sum(const4, axis=1)
从tf.reduce_sum()探究axis的方向_第4张图片

axis=2

# shape = (2, 3, 4, 2)
sum1 = tf.reduce_sum(const4, axis=2)
从tf.reduce_sum()探究axis的方向_第5张图片

axis=3

# shape = (2, 3, 4, 2)
sum1 = tf.reduce_sum(const4, axis=3)
从tf.reduce_sum()探究axis的方向_第6张图片

小结:

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)中如何旋转的可以忽略。

你可能感兴趣的:(从tf.reduce_sum()探究axis的方向)