tensorflow.keras.backend.mean() 与 tf.reduce_mean()

初学tensorflow2.0发现tf 算张量的平均值竟然有两个函数,我觉得这对初学者一点都不友好,搞不清有啥区别,不知道应该用哪一个

并且在tensorflow2.0中已经没有tf.math.mean()了,但是还有tf.math.reduce_mean(),当然,加不加这个.math都一样了

先贴上官方的解释

1.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没有条目,则减少所有维度,并返回具有单个元素的张量
参数:

  • input_tensor:要减少的张量.应该有数字类型.
  • axis:要减小的尺寸.如果为None(默认),则减少所有维度.必须在[-rank(input_tensor), rank(input_tensor))范围内.
  • keepdims:如果为true,则保留长度为1的缩小尺寸.
  • name:操作的名称(可选).

返回:
该函数返回减少的张量.
numpy兼容性
相当于np.mean

2.tf.keras.backend.mean

tf.keras.backend.mean(
    x,
    axis=None,
    keepdims=False
)

功能: 张量的平均值,与指定的轴一起。
参数:

  • x:张量或变量。
  • axis:整数列表。用于计算平均值的轴。
  • keepdims:布尔值,是否保留维度。如果keepdims是False,则对于axis中的每个条目,张量的秩减少1;如果keepdims是True,减小的维度保留长度为1。

返回: 返回x元素的均值的张量。

3.比较

从介绍看两个基本是一样的,我们来实际对比一下
此处得先说一下,如果输入张量的元素是整型的话,那结果是会四舍五入的

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)

结果一样
但注意一下,此处保留了维度,输出还是两个维度

好吧,结果一番研究没看出来区别,不知道是真的没区别还是我没发现

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值