当使用metrics = ['accuracy']时,Keras使用什么精度函数?

时间:2018-09-22 02:49:43

标签: python machine-learning keras

我想知道在使用metrics=['accuracy']时使用了什么精度函数:

model.compile(loss='binary_crossentropy', metrics=['accuracy'])

我看到了keras/metrics.py个文件。该文件中有some_accuracy个函数。但是我找不到accuracy。在哪里可以看到源代码及其工作原理?

1 个答案:

答案 0 :(得分:2)

您使用的适当的精度函数is inferred automatically from the loss function。如您所述,精度函数已在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(即binary_accuracy)或将(..., 1)用作损耗时,使用
  • binary_crossentropy

  • sparse_categorical_accuracy用作损失函数时,使用
  • sparse_categorical_crossentropy

  • 最后,将categorical_accuracy设置为损失函数时,将使用categorical_crossentropy

此外,请注意accuracy度量标准仅对分类任务有效。因此,如果在回归任务中使用accuarcy作为指标,则报告的指标值可能根本无效。

此外,还有另外两个内置的精度函数:

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']