tf.reduce_mean/tf.reduce_sum/tf.reduce_max/tf.reduce_min等等函数的参数中都有一个axis的问题,当axis=None时,看成是对所有元素进行mean/sum/max等等操作,最终结果为一个数。但当axis有值时,表示要操作的维度,但什么是要操作的维度呢?理解了半天,最后画了张图(运行tf.reduce_sum)进行解析:
如图所示,以三维矩阵为例,左边原始矩阵大小为(4,2,3),看法:先看最外层中括号(红的内有四个绿的),再看内层中括号(绿的内有两个蓝的),最后看最里层中括号(蓝的内有三个元素),依次得到( 4, 2,3 )
图中最右侧是设置不同axis时的结果,当axis=0时,结果大小为(2, 3),依次类推。
如何得出:通过观察可知axis=n,表示去掉原始大小的第n+1个维度(图中红框覆盖掉的值)而保留其他两个维度值。形象地说,去掉“4”,相当于在4个的方向上压缩成1,正好对着原始矩阵可以看成从上到下压成一个(用sum方法);去掉“2”,相当于在2个的方向上压缩成1,对着原始矩阵可以看每排两个压成一个(用sum方法);去掉“3”,相当于在3个的方向上压缩成1,对着原始矩阵可以看成每个蓝色框里三个压成一个(用sum方法)。
其他方式mean/max/min/all/any等等那些的类推。axis表征维度的理解上都是一样的。