使用指标 'acc' 和 tf.keras.metrics.Accuracy() 有什么区别

use*_*622 5 python metrics keras tensorflow

在调用模型的 compile 方法时,我们可以传入指标。

为什么不tf.keras.metrics.Accuracy一样'acc'

例如,以下 2 个调用给出了不同的结果:

model.compile(optimizer=RMSprop(learning_rate=0.001),loss=tf.keras.losses.BinaryCrossentropy(),metrics=[tf.keras.metrics.Accuracy()])

对比

model.compile(optimizer=RMSprop(learning_rate=0.001),loss=tf.keras.losses.BinaryCrossentropy(),metrics=['acc'])

我注意到在使用 callback 时on_epoch_endlogsdict的键在上述两种情况下发生了变化。使用tf.keras.metrics.Accuracy()将产生logs一个 key accuracy,但它总是 0。但是,使用 'acc' 将导致一个logs具有acc预期值的键。

use*_*622 6

进行了一些挖掘,但我相信区别在于:

acc用于引擎盖def binary_accuracy(y_true, y_pred, threshold=0.5)metrics.py

尽管

tf.keras.metrics.Accuracy用于.class Accuracy(MeanMetricWrapper)metrics.py

我通过测试和检查tensorflow的kerasmetrics.py文件的源代码得出了这个结论

  • 我只是在 [training.py](https://github.com/tensorflow/tensorflow/blob/fabcd8f89cd5975331994049705e15cb75f32e0c/tensorflow/python/keras/engine/training.py#L463) 中添加 tf v2.2文档说“当您传递字符串“accuracy”或“acc”时,我们将其转换为“tf.keras.metrics.BinaryAccuracy”、“tf.keras.metrics.CategoricalAccuracy”、“tf.keras.metrics.SparseCategoricalAccuracy”之一` 基于所使用的损失函数和模型输出形状。我们也对字符串 'crossentropy' 和 'ce' 进行类似的转换。” 另请参阅[错误](https://github.com/tensorflow/tensorflow/issues/27217) (2认同)