Функция потерь для классификации, когда более одного вывода может быть 1 за раз
-
16-10-2019 - |
Вопрос
Мой желаемый вывод не является кодированием 1-hot, но как вектор 10 дней: [1, 0, 1, 0, 1, 0, 0, 1, 1, 1]
и вход похож на обычный набор данных MNIST.
Я хочу использовать TensorFlow для создания модели, чтобы узнать об этом, тогда какую функцию потерь мне выбрать?
Решение
Если ваши классы не являются взаимодействующими, то у вас просто есть несколько сигмоидных выходов (вместо функции Softmax, как видно в примере классификаторов MNIST). Каждый вывод будет отдельной вероятностью, что сеть присваивается членству в этом классе.
Для соответствующей функции потери, в TensorFlow вы можете использовать встроенный tf.nn.sigmoid_cross_entropy_with_logits - Обратите внимание, что он работает на Logits - входные данные для функции Sigmoid - для эффективности. Ссылка объясняет вовлеченную математику.
Вы все равно захотите сигмоидную функцию на выходном уровне, поскольку, когда вы считываете прогнозы, но вы применяете функцию потери выше вход сигмовидной функции. Обратите внимание, что это не является требованием вашей проблемы, вы можете легко написать функцию потери, которая работает с сигмоидных выходов, только встроенный TensorFlow был написан по-разному, чтобы получить небольшой повышение скорости.