执行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=0
,axis=1
、axis=2
、axis=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)中如何旋转的可以忽略。