Multiclass Sigmoid для комплектации ДХО

Я работаю над проблемой глубокого обучения и хочу использовать Sigmoid для своего последнего слоя вместо softmax. Я застрял на том, что использовать для выбора действий.

В частности, как я должен заменить две последние строки этого кода и чем:

logits = tf.layers.dense(hidden, n_outputs)
outputs = tf.nn.sigmoid(logits) 

action = tf.squeeze(tf.multinomial(logits, num_samples=1), axis=-1)
y = tf.one_hot(action, n_outputs)

Спасибо

1 ответ

Если вы конвертируете из softmax в сигмовидную функцию, это обычно означает, что вы конвертируете из задачи множественной классификации в проблему двоичной классификации.

Пример мульти-классификации: есть лапшу, есть рыбу, есть мясо, не есть Пример двоичной классификации: есть, не есть

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

Вы можете просто использовать для сигмоидального вывода:

if outputs < 0.5:
    action = 0
else:
    action = 1

где действие - нет, если на выходе нет 0,5, и да, если на выходе больше 0,5.

То, что ранее делал ваш код, заключалось в том, что для двоичной классификации он будет выводить вектор из 2 элементов вместо одного скаляра. И вектор будет иметь вероятность действий да и нет, как это:

выход = [P(нет), P(да)]

и ваш tf.one_hot преобразует действие, выбранное с помощью tf.multinomial, в один горячий вектор. Поэтому, если выбрано yes, это будет выглядеть так:

у = [0, 1]

Когда вы меняете его на сигмовидную, вы получаете скаляр 0 или 1, говоря, что действие - да или нет.

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