Количество выходов в плотном слое softmax - PullRequest
1 голос
/ 26 марта 2020

Я работал над курсом Coursera для дополнительной практики и столкнулся с проблемой, которую я не понимаю.
Ссылка на Collab

Итак, насколько я Я работал над проблемами нейронной сети ML, меня всегда учили, что выходным уровнем задачи классификации мультикласса будет Плотный, с числом узлов, равным количеству классов. Например, собака, кошка, лошадь - 3 класса = 3 узла.

Однако в записной книжке есть 5 классов в метках, проверено с помощью len(label_tokenizer.word_index), но с использованием 5 узлов у меня были ужасные результаты, и с 6 узлами модель работала правильно.

Может кто-нибудь объяснить, почему это так? Я не могу найти онлайн пример, объясняющий это. Ура!

1 Ответ

0 голосов
/ 26 марта 2020

Я понял это. Выход плотного слоя с потерей категорической перекрестной энтропии предполагает, что метки / цели будут начинаться с нуля. Например:

cat - 0
dog - 1
horse - 2

В этом случае число плотных узлов равно 3.
Однако в коллабе метки были сгенерированы с использованием токерайзера keras, который токенизирует, начиная с 1 (поскольку заполнение обычно 0).

label_tokenizer = Tokenizer()
label_tokenizer.fit_on_texts(labels)
# {'business': 2, 'entertainment': 5, 'politics': 3, 'sport': 1, 'tech': 4}

Это приводит к странному случаю, когда, если у нас есть 5 плотных узлов, у нас есть выходные классы от 0-4, которые не совпадают с нашими метками с предсказаниями 1- 5.

Я доказал это эмпирически, перезапустив код со всеми метками, уменьшенными на 1, и модель успешно прошла обучение с 5 плотными узлами, поскольку метки теперь 0-4.

Я подозреваю, что с метками 1-5 и 6 плотные узлы работают, потому что модель просто узнает, что метка 0 не используется, и фокусируется на 1-5.

Если кто-то понимает внутреннюю работу категориальной кросс-энтропии, не стесняйтесь добавлять!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...