赞
踩
初学tensorflow2.0发现tf 算张量的平均值竟然有两个函数,我觉得这对初学者一点都不友好,搞不清有啥区别,不知道应该用哪一个
并且在tensorflow2.0中已经没有tf.math.mean()
了,但是还有tf.math.reduce_mean()
,当然,加不加这个.math
都一样了
先贴上官方的解释
tf.reduce_mean
reduce_mean(
input_tensor,
axis=None,
keepdims=False,
name=None,
)
功能: 计算张量的各个维度上的元素的平均值.
axis是tf.reduce_mean函数中的参数,按照函数中axis给定的维度减少input_tensor,除非keep_dims是true,否则张量的秩将在axis的每个条目中减少1.如果keep_dims为true,则缩小的维度将保留为1.
如果axis没有条目,则减少所有维度,并返回具有单个元素的张量
参数:
返回:
该函数返回减少的张量.
numpy兼容性
相当于np.mean
tf.keras.backend.mean
tf.keras.backend.mean(
x,
axis=None,
keepdims=False
)
功能: 张量的平均值,与指定的轴一起。
参数:
返回: 返回x元素的均值的张量。
从介绍看两个基本是一样的,我们来实际对比一下
此处得先说一下,如果输入张量的元素是整型的话,那结果是会四舍五入的
a= tf.constant([[1, 2, 3],[4, 5, 6]])
print(b)
print('默认参数')
print(tf.keras.backend.mean(a))
print(tf.reduce_mean(a))
输出
tf.Tensor(
[[1. 2. 3.]
[4. 5. 6.]], shape=(2, 3), dtype=float32)
默认参数
tf.Tensor(3, shape=(), dtype=int32)
tf.Tensor(3, shape=(), dtype=int32)
两个输出结果一样,输出结果被四舍五入了,如果axis不指定的话,它会先在一个维度方向求得均值后,对减少一个维度后的均值再求一次均值
a= tf.constant([[1., 2., 3],[4., 5., 6.]])
print('axis=0')
print(tf.reduce_mean(a, axis=0))
print(tf.keras.backend.mean(a, axis=0))
print('axis=1')
print(tf.reduce_mean(a, axis=1))
print(tf.keras.backend.mean(a, axis=1))
输出
axis=0
tf.Tensor([2.5 3.5 4.5], shape=(3,), dtype=float32)
tf.Tensor([2.5 3.5 4.5], shape=(3,), dtype=float32)
axis=1
tf.Tensor([2. 5.], shape=(2,), dtype=float32)
tf.Tensor([2. 5.], shape=(2,), dtype=float32)
结果一样
a= tf.constant([[1., 2., 3],[4., 5., 6.]])
print(a)
print(tf.reduce_mean(a, axis=0, keepdims=True))
print(tf.keras.backend.mean(a, axis=0, keepdims=True))
输出
tf.Tensor(
[[1. 2. 3.]
[4. 5. 6.]], shape=(2, 3), dtype=float32)
tf.Tensor([[2.5 3.5 4.5]], shape=(1, 3), dtype=float32)
tf.Tensor([[2.5 3.5 4.5]], shape=(1, 3), dtype=float32)
结果一样
但注意一下,此处保留了维度,输出还是两个维度
好吧,结果一番研究没看出来区别,不知道是真的没区别还是我没发现
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。