为什么BinaryAccuracy()改变它的值?



我定义了一个jupyter python笔记本,其中包含以下单元格,我将逐个执行:

第1单元:

import tensorflow as tf
ba = tf.keras.metrics.BinaryAccuracy()
labels = [ 
np.array([[0]], dtype=np.float32),
np.array([[0]], dtype=np.float32),
np.array([[1]], dtype=np.float32),
np.array([[1]], dtype=np.float32),
np.array([[0]], dtype=np.float32) 
]
preds = [ 
np.array([[0.1]], dtype=np.float32),
np.array([[0.1]], dtype=np.float32),
np.array([[0.9]], dtype=np.float32),
np.array([[0.1]], dtype=np.float32),
np.array([[0]], dtype=np.float32) 
]

第二单元:

ba(labels, preds)
> <tf.Tensor: shape=(), dtype=float32, numpy=0.8>

第三单元:

ba(np.ones(100), np.ones(100))
> <tf.Tensor: shape=(), dtype=float32, numpy=0.8333333>

请注意,第三个单元格的结果是完全错误的!应该是1.0,因为它是完美匹配的。如果我执行这个单元格多次,值也会不同!

然而,如果我省略第二个单元格,只执行第一个和第三个单元格,计算是正确的。这是一个奇怪的行为。

为什么BinaryAccuracy()改变它的值?这是一个错误,我做错了什么,是我的设置错误,或者只是一些机制,我不知道?

同样,如果你只执行了第一个和第三个单元格,然后返回执行第二个单元格多次,每次的值都不一样!

你应该使用reset_states()

np.random.seed(33)
ba = tf.keras.metrics.BinaryAccuracy()
print(ba(np.random.randint(0,3, (100)), np.random.randint(0,3, (100)))) # 0.3
ba.reset_states()
print(ba(np.ones(100), np.ones(100))) # 1.0

相关内容

  • 没有找到相关文章

最新更新