Использование softmax в качестве выходной функции при использовании binary_crossentropy в качестве функции потерь? - PullRequest
0 голосов
/ 11 июля 2020

В настоящее время я обучаю модель бинарной классификации. Мне понравилась идея иметь две вероятности (по одной для каждого из существующих классов), которые в сумме дают 1. Поэтому я использовал softmax в моем выходном слое и получил очень высокую точность (до 99,5%) с очень низкими потерями. 0,007. Немного исследуя, я обнаружил, что двоичная кроссентропия - единственный реальный выбор при обучении проблеме двухмерной классификации. Не могли бы вы помочь мне понять, что следует использовать в качестве функции потерь и функции активации в задаче двоичной классификации и почему?

Вот мой код:

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(10, input_dim=input_dim, activation='sigmoid'))
model.add(tf.keras.layers.Dense(10, activation='sigmoid'))
model.add(tf.keras.layers.Dense(2, activation='softmax'))

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

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Итак, если каждый объект может представлять только один класс, тогда нет разницы между

model.add(Dense(1, activation='sigmoid'))
loss = tf.keras.losses.BinaryCrossentropy()

и

model.add(Dense(2, activation='softmax'))
loss = tf.keras.losses.CategoricalCrossentropy()

Как уже упоминалось, здесь , бинарная кроссентропия это просто случай категоричной кроссэнтропии.

1 голос
/ 11 июля 2020
  • Функция потерь зависит от типа проблемы.

    • Для задачи двоичной классификации -> binary_crossentropy

    • Для задачи с несколькими классами - >ategoricol_crossentropy

    • Для задачи классификации текста -> Рассчитываются потери MSE.

  • Функция активации также зависит от типа проблемы.

    • Обычно используется функция активации relu, но иногда для задачи двоичной классификации tanh работает лучше.

Я бы не советовал использовать sigmoid

Для оптимизатора, как правило, Adadelta работает лучше.

Причина предложения - точность метри c. Цель состоит в том, чтобы достичь высокой точности, поэтому ваша модель должна учиться. Здесь нет строгих правил, но доказано, что некоторые методы работают лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...