赞
踩
今晚在学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
import tensorflow as tf x = tf.constant([[1, 3, 5, 7],[1, 1, 0, 0]]) m = tf.keras.metrics.Mean() m.update_state(x) m.result().numpy()Output:
1.886
#tf.keras.metrics.Mean: CASE2
m.reset_state() m.update_state([1, 3, 5, 7], sample_weight=[1, 1, 0, 0]) 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()重置状态,就会把之前输入的参数包括进去。
比如
m = tf.keras.metrics.Mean() m.update_state([1, 3, 5, 7]) m.result().numpy() # m.reset_state() m.update_state([8]) print(m.result().numpy()) print((1+3+5+7+8) / 5)输出结果为:
4.8
4.8
但是对于tf.math.reduce_mean,并不存在记忆之前参数的概念。
链接如下:
另外拓展一下,在metrics模块下的很多方法和类,计算时都会受到之前状态的影响,
但是对于loss模块或math模块,每一次的计算都是独立不受上一次计算的影响的!
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。