在深度学习里研究的物体的关系,都是比较复杂的。比如一个图片32X32大小的,它的像素信息就有1024个点,如果考虑RGB三种颜色,就是1024X3了。对于目前还没有办法构造140亿个神经元的计算机来说,只能干一件事情,就是简化,化繁为简。为了简化,就需要使用算法来进行,在数学上最简单的处理,就是求平均值。这个道理非常简单,如果10个数,只要把它们相加,再除以10即可。对于0维数字,可以这样来计算,如果对于N维的张量,就不是这么简单的计算了。就拿二维的矩阵来说,它可以横着算,还可以是竖着算,还可以全部加到一起,再除以总数。可见对于N维的张量来说,有更多的可能,那么就得抽像一个数轴出来。数轴在初中的代数就学习了,可见数轴在高等数学里也会使用到的,N维张量,就是N个数轴的表示,如果沿着不同的数轴进行计算,就会产生不同的作用。其实平均值也可以算是降维思想的一种。
在TF里,就提供了这样一个算法来计算张量的平均值:
tf.reduce_mean(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)
沿着张量不同的数轴进行计算平均值。
参数:
input_tensor: 被计算的张量,确保为数字类型。
axis: 方向数轴,如果没有指明,默认是所有数轴都减小为1。
keep_dims: 如果定义true, 则保留维数,但数量个数为0.
name: 操作过程的名称。
reduction_indices: 为了旧函数兼容的数轴。
返回值:
降低维数的平均值。
例子:
#python 3.5.3 蔡军生 #http://edu.csdn.net/course/detail/2592 # import tensorflow as tf #创建张量 x = tf.Variable([[1.,2.,3.], [4.,5.,6.], [7.,8.,9.]]) #显示它的值 init_op = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init_op) y = tf.reduce_mean(x) y01 = tf.reduce_mean(x, 0, keep_dims=False) y02 = tf.reduce_mean(x, 0, keep_dims=True) y1 = tf.reduce_mean(x, 1) print(x.eval()) print("tf.reduce_mean(x):", y.eval()) print("tf.reduce_mean(x, 0, keep_dims=False):", y01.eval()) print("tf.reduce_mean(x, 0, keep_dims=True):", y02.eval()) print("tf.reduce_mean(x, 1):", y1.eval())
输出结果:
====================== RESTART: D:/AI/sample/tf_1.28.py ======================
[[ 1. 2. 3.]
[ 4. 5. 6.]
[ 7. 8. 9.]]
tf.reduce_mean(x): 5.0
tf.reduce_mean(x, 0, keep_dims=False): [ 4. 5. 6.]
tf.reduce_mean(x, 0, keep_dims=True): [[ 4. 5. 6.]]
tf.reduce_mean(x, 1): [ 2. 5. 8.]
>>>