我正在尝试理解TensorFlow和Keras中的度量系统是如何工作的。
我有一个包含密集层的顺序模型,唯一的度量是"accuracy"
(作为字符串):
model.compile( # [...] metrics=["accuracy"], loss="binary_crossentropy")
与该准确度相关的平均值在90%到100%之间。
然而,在查看了TensorFlow文档中所有可用的类之后,我尝试更改我的度量,并用其Python类等价物tf.keras.metrics.Accuracy
替换了"accuracy"
:
model.compile( # [...] metrics=[tf.keras.metrics.Accuracy()], loss="binary_crossentropy")
数据集和模型(除了度量之外)没有任何修改,然而数值发生了变化:准确度现在在40%到60%之间。
然后我尝试传递tf.metrics.Accuracy
的一个实例,但结果与之前使用tf.keras.metrics.Accuracy
时相同。
我的问题是:
"accuracy"
和tf.keras.metrics.Accuracy
难道不应该是代表同一个度量吗?
回答:
请使用tf.keras.metrics.BinaryCrossentropy()代替tf.metrics.Accuracy(),这样你会发现相同的结果。
这里的’accuracy’取决于损失函数。