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, говоря, что действие - да или нет.