python - 为什么 BinaryAccuracy() 会改变它的值?
问题描述
我用以下单元定义了一个 jupyter python notebook,我一个一个地执行:
第一个单元格:
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
,因为它是一个完美的匹配。如果我多次执行这个单元格,值也会不同!
但是,如果我省略了第 2 个单元格,只执行第 1 个和第 3 个单元格,则计算是正确的。这是奇怪的行为。
为什么 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
推荐阅读
- doxygen - Doxygen 命令
- c - 了解 RIP 相对重定位
- reactjs - 赛普拉斯获取兄弟姐妹输入并更改值?
- html - WordPress中的布局更改
- kubernetes - 一个 pod 中多个容器的活跃度和就绪度探测
- amazon-web-services - 是否可以将 xpath 或数组与 AWS ECS 环境变量一起使用?
- amazon-web-services - 如何为多个项目设计新的复杂 AWS 账户结构
- reactjs - 如何使用 react hook 和 redux 在 useState 中设置数组
- angular - RxJs - 当观察到的值为假时取消订阅,同时期待副作用
- javascript - 如何使用递归函数动态更改嵌套状态?