概述
tf.reduce_mean()用于计算tensor(张量)沿着指定的数轴(即tensor的某一维度)上的平均值,用作降维或者计算tensor的平均值。
指定一个维度的平均值计算请参考https://blog.csdn.net/silent1cat/article/details/119782064
另外一种情况
当axis参数是列表形式时,即不止指定一个轴时,也是计算平均值,并且列表中指定轴的顺序不会影响结果。列表长度为1时和用axis指定的结果一致。列表长度大于1时,计算均值之前的加和方式有变化,即如果是[0, 1]表示先将元素按照第0轴相加,然后按照第一轴相加后再计算平均,如下例子,原数据Y的维度为(2, 2, 3),先第0轴再第1轴后数据有三个即(18, 22, 26),因为是4个数据相加,所以分别除以4,则得最终结果(4.5, 5.5, 6.5)。
直接上代码
import numpy as np
import tensorflow as tf
X = np.array([[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]])
Y = tf.cast(X, tf.float32)
print(Y.shape)
mean_all = tf.reduce_mean(Y)
mean_0 = tf.reduce_mean(Y, axis=0) # 可以添加keepdims=True,生成的结果的与Y的维度一样。反之,降维
mean_1 = tf.reduce_mean(Y, axis=1)
mean_2 = tf.reduce_mean(Y, axis=2)
mean_3 = tf.reduce_mean(Y, [0])
mean_4 = tf.reduce_mean(Y, [0, 1]) # 可以任意组合
mean_5 = tf.reduce_mean(Y, [0, 1, 2])
print("mean_all:\n", mean_all)
print("mean_0:\n", mean_0)
print("mean_1:\n", mean_1)
print("mean_2:\n", mean_2)
print("mean_3:\n", mean_3)
print("mean_4:\n", mean_4)
print("mean_5:\n", mean_5)
结果
(2, 2, 3)
mean_all:
tf.Tensor(5.5, shape=(), dtype=float32)
mean_0:
tf.Tensor(
[[3. 4. 5.]
[6. 7. 8.]], shape=(2, 3), dtype=float32)
mean_1:
tf.Tensor(
[[1.5 2.5 3.5]
[7.5 8.5 9.5]], shape=(2, 3), dtype=float32)
mean_2:
tf.Tensor(
[[ 1. 4.]
[ 7. 10.]], shape=(2, 2), dtype=float32)
mean_3:
tf.Tensor(
[[3. 4. 5.]
[6. 7. 8.]], shape=(2, 3), dtype=float32)
mean_4:
tf.Tensor([4.5 5.5 6.5], shape=(3,), dtype=float32)
mean_5:
tf.Tensor(5.5, shape=(), dtype=float32)