在Keras模型中使用精度评估神经网络

时间:2017-06-28 10:03:45

标签: neural-network keras keras-layer

在Keras,当训练和评估神经网络模型(对两个类别(0和1)进行分类)时,该模型返回了训练和测试的损失和准确性:

model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=['accuracy'])

这种准确性代表什么?它是两个类别的平均准确度还是两个类别之一的准确度?

2 个答案:

答案 0 :(得分:3)

准确度是正确分类的样本数除以所有样本数。它不涉及任何每类准确度。

以下是Keras用于计算二进制精度的代码:

K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)

答案 1 :(得分:1)

Keras将从其代码中的可能指标列表中进行选择。从metrics源代码中,有五种可能性:

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):
    return K.cast(K.equal(K.max(y_true, axis=-1),
    K.cast(K.argmax(y_pred, axis=-1), K.floatx())),
    K.floatx())

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)

选择取决于您拥有的型号和损耗功能。在training模块中,您会看到它选择准确度函数:

if (output_shape[-1] == 1 or self.loss_functions[i] == losses.binary_crossentropy):
    # case: binary accuracy
    acc_fn = metrics_module.binary_accuracy

elif self.loss_functions[i] == losses.sparse_categorical_crossentropy:
    # case: categorical accuracy with sparse targets
    acc_fn = metrics_module.sparse_categorical_accuracy

else:
    acc_fn = metrics_module.categorical_accuracy

在您的模型中,您有2个输出和categorical_crossentropy个丢失,因此您将陷入案例3,并且您的准确性将是:

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())

翻译,您的模型只需要一个类为真,如果具有最大值的预测类的索引等于真实类的索引,则计为正确。

示例:

  • 预测:[0.7; 0.3] /// true:[1; 0] ---算得正确
  • 预测:[0.8; 0,2] /// true:[0; 1] ---算错了