Keras будет выбирать из списка возможных метрик в своем коде. Из исходного кода метрики есть пять возможностей:
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)
Выбор зависит от типа модели и функции потерь. В модуле обучения он выбирает функция точности:
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] /// правда: [1 ; 0] --- считается правильным
- предсказано: [0,8; 0,2] /// правда: [0 ; 1] --- считается неправильным
person
Daniel Möller
schedule
28.06.2017