Преобразует ли tf.nn.sigmoid_cross_entropy_with_logits данные в вероятности? - PullRequest
0 голосов
/ 12 октября 2018

В задачах классификации мы предпочитаем применять функцию tf.nn.softmax, потому что эта функция дает выходные данные в виде вероятностей, или мы также можем реализовать tf.nn.softmax_cross_entropy_with_logits, которые применяют функцию активации softmax к выходным данным модели.Я хочу классифицировать свои данные на две категории.Я наткнулся на код, где они использовали tf.nn.sigmoid_cross_entropy_with_logits на последнем слое.Я хочу знать, что мы можем использовать сигмоид в качестве функции активации на последнем слое?Разве мы не должны использовать softmax?Без применения softmax как я могу узнать вероятности?Потому что в конце модели, когда мы проверяем, насколько точна наша модель, мы используем следующую команду

tf.equal(tf.argmax(y,axis=1),tf.argmax(y_,axis=1))

Может ли после использования сигмоида на последнем полностью подключенном слое мы можем использовать вышеуказанную команду для проверки правильных предсказаний?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Код, который использует tf.nn.sigmoid_cross_entropy_with_logits, не выполняет классификацию по нескольким классам, он выполняет классификацию по нескольким меткам , где у вас есть несколько классов, но они не являются исключительными, и можно прогнозировать несколько классовв то же время.

Для случая с несколькими метками сигмоид является предпочтительным, так как тогда вы получаете независимую вероятность для каждого класса.Оценка в этом случае отличается, вы не можете использовать обычную точность, а вместо этого используется точность / отзыв для каждого класса.

0 голосов
/ 12 октября 2018

Softmax используется для преобразования необработанных выходных значений ряда выходных нейронов в вероятности для задач классификации нескольких классов.Для задач двоичной классификации вместо использования двух выходных нейронов вы используете один выходной нейрон и применяете логистическую функцию сигмоид к выходному значению.Когда сигмоид проецирует значения в диапазон [0, 1], вы получаете вероятность p.Это вероятность того, что текущий вход принадлежит одному классу.Вероятность того, что входные данные принадлежат другому классу, тогда равна 1 - p.

. Для вашего конкретного случая обратите внимание, что документ tf.nn.sigmoid_cross_entropy_with_logits говорит:

Измеряет вероятность ошибкив задачах дискретной классификации, в которых каждый класс независим и не является взаимоисключающим.Например, можно выполнить многослойную классификацию, в которой изображение может содержать одновременно и слона, и собаку.

Исходя из опубликованного вами кода, я предполагаю, что выходной размер сети превышает единицу(иначе argmax не имеет смысла), вероятно, два.Это означает, что код фактически выполняет несколько двоичных классификаций, которые должны быть независимыми, но вы сказали, что это должна быть одна двоичная классификация.

Если мои предположения верны, то код неверен, поскольку две независимые двоичные классификациисильно отличаются от одной проблемы классификации.Фактически, y должен иметь только один выход, и вы бы проверили, равна ли вероятность > 0.5, чтобы сравнить его с целями.

...