我想知道在使用metrics=['accuracy']
时使用了什么精度函数:
model.compile(loss='binary_crossentropy', metrics=['accuracy'])
我查看了keras/metrics.py 文件。该文件中有some_accuracy
函数,但我找不到accuracy
。我可以在哪里查看源代码以及它的工作原理?
回答:
合适的精度函数根据您使用的损失函数自动推断。如您所述,精度函数已在metric.py 文件中定义:
def binary_accuracy(y_true, y_pred): return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)def categorical_accuracy(y_true, y_pred): return K.cast(K.equal(K.argmax(y_true, axis=-1), K.argmax(y_pred, axis=-1)), K.floatx())def sparse_categorical_accuracy(y_true, y_pred): # flatten y_true in case it's in shape (num_samples, 1) instead of (num_samples,) return K.cast(K.equal(K.flatten(y_true), K.cast(K.argmax(y_pred, axis=-1), K.floatx())), K.floatx())
-
当模型输出最后轴的维度等于1(即
(..., 1)
)或使用binary_crossentropy
作为损失函数时,使用binary_accuracy
。 -
当使用
sparse_categorical_crossentropy
作为损失函数时,使用sparse_categorical_accuracy
。 -
最后,当设置
categorical_crossentropy
作为损失函数时,使用categorical_accuracy
。
另外,请注意,accuracy
指标仅适用于分类任务。因此,如果在回归任务中使用accuracy
作为指标,报告的指标值可能完全无效。
此外,还有另外两个内置的精度函数:
def top_k_categorical_accuracy(y_true, y_pred, k=5): return K.mean(K.in_top_k(y_pred, K.argmax(y_true, axis=-1), k), axis=-1)def sparse_top_k_categorical_accuracy(y_true, y_pred, k=5): return K.mean(K.in_top_k(y_pred, K.cast(K.max(y_true, axis=-1), 'int32'), k), axis=-1)
要使用它们,您需要明确地将它们的名称传递给metrics
参数,即metrics=['top_k_categorical_accuracy']
或metrics=['sparse_top_k_categorical_accuracy']