Я понял это. Выход плотного слоя с потерей категорической перекрестной энтропии предполагает, что метки / цели будут начинаться с нуля. Например:
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.
Если кто-то понимает внутреннюю работу категориальной кросс-энтропии, не стесняйтесь добавлять!