密集softmax层中的输出数量



我一直在学习Coursera课程进行额外练习,遇到了一个我不理解的问题
链接到Collab

就我研究ML神经网络问题而言,我一直被教导多类分类问题的输出层将是密集的,节点的数量等于类的数量。例如,狗、猫、马-3类=3个节点。

然而,在笔记本中,标签中有5个类,使用len(label_tokenizer.word_index)进行检查,但使用5个节点,我的结果很糟糕,使用6个节点,模型工作正常。

有人能解释一下为什么会这样吗?我在网上找不到任何解释这一点的例子。干杯

我想明白了。具有分类交叉熵损失的密集层的输出期望标签/目标从零开始。例如:

cat - 0
dog - 1
horse - 2

在这种情况下,密集节点的数量为3。
然而,在collab中,标签是使用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。

如果有人了解分类交叉熵的内部工作原理,请随意补充!

最新更新