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] /// 真:[0 ; 1] --- 算错