参考文章:
版权声明:本文其中一部分参考了CSDN博主「-牧野-」的原创文章,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dcrmg/article/details/79797826
tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值,主要用作降维或者计算tensor(图像)的平均值。
tf.reduce_mean 函数
reduce_mean(
input_tensor,
axis=None,#axis是“轴”的意思,坐标轴
keep_dims=False,
name=None,
reduction_indices=None
)
参数:
- 参数input_tensor: 输入的待降维的tensor;
- 参数axis: 指定的轴,如果不指定,则计算所有元素的均值;
- 参数keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;
- 参数name: 操作的名称;
- 参数 reduction_indices:在以前版本中用来指定轴,已弃用;
以一个维度是2,形状是[2,4]的tensor举例:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
x = [[30,80,20,30],
[50,20,30,40]]
xx = tf.cast(x,tf.float32)
mean_all = tf.reduce_mean(xx, keep_dims=False)
mean_0 = tf.reduce_mean(xx, axis=0, keep_dims=False)
mean_1 = tf.reduce_mean(xx, axis=1, keep_dims=False)
mean_2 = tf.reduce_mean(xx, axis=1, keep_dims=True)#改了keep_dims
with tf.Session() as sess:
m_a,m_0,m_1,m_2 = sess.run([mean_all, mean_0, mean_1,mean_2])
print (m_a) # output: 37.5
print (m_0) # output: [40. 50. 25. 35.]
print (m_1) #output: [40. 35.]
print ("如果设置保持原来的张量的维度,keep_dims=True ,结果:")
print (m_2)
#output: [[40.]
# [35.]]
运行结果,加上个人理解:
37.5
[40. 50. 25. 35.]
[40. 35.]
如果设置保持原来的张量的维度,keep_dims=True ,结果:
[[40.]
[35.]]
x = [[30,80,20,30],
[50,20,30,40]]
- 37.5 是把多维数组x,按一维的形式展开,求所有元素的和,再求平均值。
- [40. 50. 25. 35.] axis=0,按第一维(行)上的元素,每一列都这样做求平均值。
- [[40.]
[35.]]
axis=1,按第二维(列)上的元素,每一行都这样做求平均值。
当设置选择keep_dims=True ,保持原来的张量的维度时,可以明显的看到结果是个“2*1的列向量”。
类似函数还有:
- tf.reduce_sum :计算tensor指定轴方向上的所有元素的累加和;
- tf.reduce_max : 计算tensor指定轴方向上的各个元素的最大值;
- tf.reduce_all : 计算tensor指定轴方向上的各个元素的逻辑和(and运算);
- tf.reduce_any: 计算tensor指定轴方向上的各个元素的逻辑或(or运算);