当前位置:   article > 正文

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

keras 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,
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

功能: 计算张量的各个维度上的元素的平均值.

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
)
  • 1
  • 2
  • 3
  • 4
  • 5

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

  • 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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

两个输出结果一样,输出结果被四舍五入了,如果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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果一样

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))
  • 1
  • 2
  • 3
  • 4

输出

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/133145?site
推荐阅读
相关标签
  

闽ICP备14008679号