Почему точность и бинарная_точность в керасе имеют одинаковый результат?

Я создал простую модель для бинарной классификации с помощью Keras. Код:

    # create model
    model = Sequential()
    model.add(Dense(250, input_dim=1, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    # Compile model
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy', 'binary_accuracy'])

Моей целью было проверить результат accuracy и binary_accuracy понять разницу между ними.

Как говорит Керас, binary_accuracy точность имеет порог, который по умолчанию равен .5, а «точность» — нет. Когда я тестирую их с выборочными данными, результат отличается, но в поезде модели у вас одинаковые результаты в каждую эпоху.

Для этой истинной и предсказанной выборки, которую я тестировал accuracy и binary_accuracy:

   y_true = [[1], [1], [0], [0]]
   y_pred = [[0.51], [1], [0], [0.4]]

Для binary_accuracy это:

m = tf.keras.metrics.BinaryAccuracy()
m.update_state(y_true, y_pred)
m.result().numpy()

Этот результат: 1

Для accuracy это:

m = tf.keras.metrics.Accuracy()
m.update_state(y_true, y_pred)
m.result().numpy()

И результат: '.5'

Но в приведенной выше модели это одинаково для каждого из них в каждую эпоху.

Редактировать

Изменив компиляцию на это, результат изменился:

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy', tf.keras.metrics.BinaryAccuracy(threshold=.7)])

Почему accuracy работает как binary_accuracy с threshold=0.5 в модели, а не вне модели?

Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
9
0
8 258
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно tf.keras.Model.compile() документации:

Когда вы передаете строки «accuracy» или «acc», мы преобразуем их в одну из tf.keras.metrics.BinaryAccuracy, tf.keras.metrics.CategoricalAccuracy, tf.keras.metrics.SparseCategoricalAccuracy на основе используемой функции потерь и выходная форма модели. Аналогичное преобразование мы делаем и для строк crossentropy и ce.

В вашем случае он был преобразован в BinaryAccuracy, поэтому результат тот же.

Однако tf.keras.metrics.Accuracy — это совсем другое. Если вы читаете документацию:

Вычисляет, как часто прогнозы совпадают с метками.

Это означает, что он рассматривает уникальные значения y_pred и y_true и рассматривает каждое уникальное значение как отдельную метку. В вашем случае 0,51 и 0,4 рассматриваются как отдельные метки, и поскольку они не равны 1 и 0 соответственно, вы получаете 0,5

Приносим извинения за то, что сначала пометили этот вопрос как дубликат, поведение в пакете tf.keras отличается от поведения в пакете keras.

Большое спасибо. затем оценить сделать это? он использует threshold=0.5? и когда мы используем прогнозирование и другой порог, точность меняется?

Tavakoli 18.12.2020 19:00

При оценке следует использовать тот же порог. Если вы измените порог, точность, естественно, изменится. При выполнении вывода порог классификации можно настроить в соответствии с вашими потребностями, то есть сбалансировать истинные положительные и истинные отрицательные значения.

Proko 18.12.2020 19:03

Другие вопросы по теме