在Keras,当训练和评估神经网络模型(对两个类别(0和1)进行分类)时,该模型返回了训练和测试的损失和准确性:
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=['accuracy'])
这种准确性代表什么?它是两个类别的平均准确度还是两个类别之一的准确度?
答案 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())
翻译,您的模型只需要一个类为真,如果具有最大值的预测类的索引等于真实类的索引,则计为正确。
示例: