【发布时间】:2021-03-10 10:36:41
【问题描述】:
我用以下单元定义了一个 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() 会改变它的值?这是一个错误,是我做错了什么,是我的设置错误,还是只是我不知道的某种机制?
此外,如果您只执行了第 1 个和第 3 个单元格,然后返回执行第 2 个单元格多次,则每次的值都不同!
【问题讨论】:
标签: python numpy tensorflow keras