当前位置:   article > 正文

tf.math.reduce_mean和tf.keras.metrics.Mean的区别是什么,区别在于记不记忆之前的状态_tf.metrics.mean()

tf.metrics.mean()

今晚在学tensorflow的API的时候,看到reduce_mean,于是心生活意——为何不直接用mean呢?

可能这个和mean有区别?

查询官网后,发现了 tf.math.reduce_mean和tf.keras.metrics.Mean这两种类。

google后,发现stackoverflow中有人已经问了这个问题,第一个回答如下,其实并没有回答到重点。

Functionality of tf.keras.metrics.Mean and tf.math.reduce_mean are slightly different. Look at the example

#tf.keras.metrics.Mean: CASE1

  1. import tensorflow as tf
  2. x = tf.constant([[1, 3, 5, 7],[1, 1, 0, 0]])
  3. m = tf.keras.metrics.Mean()
  4. m.update_state(x)
  5. m.result().numpy()

Output:

1.886

#tf.keras.metrics.Mean: CASE2

  1. m.reset_state()
  2. m.update_state([1, 3, 5, 7], sample_weight=[1, 1, 0, 0])
  3. m.result().numpy()

Output:

2.0

#tf.math.reduce_mean

#CASE1

y = tf.reduce_mean(x)

Output:

tf.Tensor(2, shape=(), dtype=int32)

#CASE2

y = tf.reduce_mean(x1,1)

Output:

tf.Tensor([4 0], shape=(2,), dtype=int32)

#CASE3

y = tf.reduce_mean(x1,0)

Output:

tf.Tensor([1 2 2 3], shape=(4,), dtype=int32)

In case of tf.math.reduce_mean, you see that when axis(numpy) is 1, it computes mean across (1, 3, 5, 7) and (1,1,0,0), so 1 defines across which axis the mean is computed. When it is 0, the mean is computed across(1,1),(3,1),(5,0) and (7,0), and so on.

然后我又做了一份中文版的回答,为啥不用英文去回答呢?因为想让老外多认识一下中华文化。

我可以告诉你。

对于tf.keras.metrics.Mean,如果通过update_state()方法来更新,并且没有用reset_state()重置状态,就会把之前输入的参数包括进去。

比如

  1. m = tf.keras.metrics.Mean()
  2. m.update_state([1, 3, 5, 7])
  3. m.result().numpy()
  4. # m.reset_state()
  5. m.update_state([8])
  6. print(m.result().numpy())
  7. print((1+3+5+7+8) / 5)

输出结果为:

4.8

4.8

但是对于tf.math.reduce_mean,并不存在记忆之前参数的概念。

链接如下:

 python - What's the difference between tf.math.reduce_mean and tf.keras.metrics.Mean? - Stack Overflow

另外拓展一下,在metrics模块下的很多方法和类,计算时都会受到之前状态的影响,

但是对于loss模块或math模块,每一次的计算都是独立不受上一次计算的影响的! 

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

闽ICP备14008679号