Нейросеть. Как правильно указывать метки?

Сложилась такая ситуация, что чем дольше я разбираюсь с нейросетью, тем меньше я понимаю что происходит... Поэтому я решил начать с самого начала. У меня есть несколько вопросов, но начну я с самого первого.

У меня есть набор данных. Каждую строку данных я отношу к одной из 3-х категорий (0-1-2).

Вопрос, как правильно добавить метки для обучения сети:

это должен быть один выходной нейрон: [или 0, или 1, или 2]

это должно быть три нейрона: или [1,0,0], или [0,1,0], или [0,0,1]

или как-то по другому

Данные состоят из числовых значений, которые я нормализую, привожу в диапозон от 0 до 1.


Ответы (1 шт):

Автор решения: EzikBro

Согласно википедии, которая хоть и не самый полезный источник, но все-таки весьма достоверный для не специалиста: "Топология такой сети характеризуется тем, что количество нейронов в выходном слое, как правило, равно количеству определяемых классов."

Разумеется, существуют исключения, как например, бинарная классификация, в которой обычно используется один нейрон на выходном слое, или классификация на категории вида "мало"-"нормально"-"много", где категории связаны между собой каким-то конкретным возрастающим признаком (который может быть и не обозначен во входных данных), но второй случай ближе к регрессии.

Также стоит отметить, что в случае использования трех (или любого другого количества) нейронов в зависимости от активационной функции нейронного слоя вы можете получать не только выходные вектора [1, 0, 0], [0, 1, 0], [0, 0, 1], но и, к примеру, [0.7, 0.2, 0.1], где эти числа обычно обозначают вероятность того, что входной объект относится к конкретной категории.

Обозначение же лейбла зависит от метода потерь. Для задач классификации наиболее часто используется CategoricalCrossentropy и его собрат SparseCategoricalCrossentropy. Для использование первого метода вам нужно применить One-Hot кодирование меток (все численные метки переводятся в бинарные вектора, например 2 -> [0, 0, 1], 1 -> [0, 1, 0]). А для использования второго вы можете (и должны) использовать обычные числа в качестве классов.

→ Ссылка