关于tensorflow的规约函数

规约函数都有降维的功能,每个函数都有维度线(axis) ,如果不指定,那么他的默认参数是None,就是把这个张量(tensor)降到0维度,也就是一个数。

规约函数如下:

函数 描述
reduce_sum ( input_tensor , axis = None , keep_dims = False , name = None , reduction_indices = None) 计算输入张量元素的和,或者按照axis指定的轴进行求和
reduce_prod(input_tensor,axis=None,keep_dims=False,name=None,reduction_indices=None) 计算输入张量元素的乘积,或者按照axis指定的轴进行乘积
reduce_mix(input_tensor,axis=None,keep_dims=False,name=None,reduction_indices=None) 计算输入张量元素的最小值
reduce_max(input_tensor,axis=None,keep_dims=False,name=None,reduction_indices=None) 计算输入张量元素的最大值
reduce_mean(input_tensor,axis=None,keep_dims=False,name=None,reduction_indices=None) 计算输入张量各元素的平均值
reduce_all(input_tensor,axis=None,keep_dims=False,name=None,reduction_indices=None) 对张量的各个元素求逻辑“与”
reduce_any(input_tensor,axis=None,keep_dims=False,name=None,reduction_indices=None) 对张量的各个元素求逻辑“或”

我们先来说下张量的维度是怎么算的?

对于一个二维张量来说例如:[[1,2,3],[4,5,6],[7,8,9]]。因为他的最外层有两个括号,所以在tensorflow中我们就称它是二维张量(但是在矩阵中它是3*3的三维矩阵,所以不要用矩阵的思想来理解这个维度)

下面我们就这一个求平均值的函数reduce_mean()来讲解是怎么计算的:

我们就假设张量为a = [[1,2,3],[4,5,6],[7,8,9]],它的0维度包含三个1*3的向量分别是[1,2,3]、[4,5,6]、[7,8,9]。那么reduce_mean(a,0)就是张量a在0维度上的平均值为(1+4+7)/ 3=4,、(2+5+8)/3= 5、(3+6+9)/3=6,所以reduce_mean(a,0)输出的结果为[4,5,6]。同理reduce_mean(a,1)在1维度上的平均值为(1+2+3)/ 3=2,、(4+5+6)/3= 5、(7+8+9)/3=8,所以输出结果为[2,5,8]

注意:如果在张量全部元素是整型,所以输出的也是整型(小数是去舍去小数点后面的)

下面我们用程序演示下:

1 import tensorflow as tf
2 ab = tf.Variable([[1,2,3],[4,5,6],[7,8,9]])
3 print(ab.shape)
4 with tf.Session() as sess:
5     sess.run(tf.global_variables_initializer())
6     print("ab的0维度平均值:",sess.run(tf.reduce_mean(ab,0)))
7     print("ab的1维度平均值:",sess.run(tf.reduce_mean(ab,1)))

输出结果:

ab的0维度平均值: [4 5 6]
ab的1维度平均值: [2 5 8]

猜你喜欢

转载自www.cnblogs.com/The-Shining/p/11688301.html