首页 > 代码库 > 张量不同数轴的平均值计算

张量不同数轴的平均值计算

转载:

http://blog.csdn.net/caimouse/article/details/59495858;

一、概述

在深度学习里研究的物体的关系,都是比较复杂的。比如一个图片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: 为了旧函数兼容的数轴。

返回值:

降低维数的平均值。

三、实战

import tensorflow as tf
#创建张量  
x = tf.Variable([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);
#显示
init = tf.global_variables_initializer();
with tf.Session() as sess:
    sess.run(init);
    #tf.reduce_mean(input_tensor,  axis=None,  keep_dims=False,  name=None,  reduction_indices=None)
    y = tf.reduce_mean(x);
    y01 = tf.reduce_mean(x, axis=0, keep_dims=False);
    y02 = tf.reduce_mean(x, axis=0, keep_dims=True);
    y1 = tf.reduce_mean(x, axis=1);
    
    print("x = ", x.eval());
    print("tf.reduce_mean(x) = ", y.eval());
    print("tf.reduce_mean(x, axis=0, keep_dims=False) = ", y01.eval());
    print("tf.reduce_mean(x, axis=0, keep_dims=True) = ", y02.eval())
    print("tf.reduce_mean(x, axis=1) = ", y1.eval());

执行结果:

(x = , array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.],
       [ 7.,  8.,  9.]], dtype=float32))
(tf.reduce_mean(x) = , 5.0)
(tf.reduce_mean(x, axis=0, keep_dims=False) = , array([ 4.,  5.,  6.], dtype=float32))
(tf.reduce_mean(x, axis=0, keep_dims=True) = , array([[ 4.,  5.,  6.]], dtype=float32))
(tf.reduce_mean(x, axis=1) = , array([ 2.,  5.,  8.], dtype=float32))

总结:

tf.reduce_mean(x)表示计算全局平均值;
tf.reduce_mean(x, axis=0)表示计算y轴平均值;
tf.reduce_mean(x, axis=1)表示计算x轴平均值;
 

 

张量不同数轴的平均值计算