首页 文章

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

提问于
浏览
1

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

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

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

2 回答

  • 1

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

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

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

    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] ---算错了

相关问题