【发布时间】:2018-06-27 06:44:18
【问题描述】:
我正在使用 LSTM 解决 NLP 问题。问题是具有 3 个类别(1,2 和 3)的多类别分类。所以我使用以下代码转换了目标类:y_train=to_catgorical(y_train) 和y_test 类似。
但是在我写model.add((Dense(3,activation='softmax'))的输出密集层,我得到以下错误:
检查目标时出错:预期dense_1 的形状为(None, 3),但得到的数组的形状为(658118, 4)
但是,当我将其修复为 model.add((Dense(4,activation='softmax')),即 n+1(n=要预测的类的数量)时,它可以工作。 但在 Keras 示例中,他们使用了 cifar10 数据集,并且使用的类数为 10,而不是 11,并且可以正常工作。
同样在二进制分类的情况下(要预测的 2 个类别),我们只使用 1 个输出,即model.add(Dense(1,"sigmoid"))。
我已经浏览了this post,但仍然无法为这个东西找到一个令人信服的逻辑,所以我想用 Keras 中的 Dense 层输出形状来澄清这个概念。
附:我的理解是,Keras 考虑来自0:num_classes 的类,所以我们必须再进行一次转换。但是要问一件事,“0”矢量图层必须保持未使用,对吗?在 cifar10 数据集的情况下,类是0:9,这就是 num_classes=10 起作用的原因吗?如果是这种情况,那么如果我们必须对 3 个类(0,1 & 2)进行预测,那么我们可以使用 num_classes=3 对吗?
【问题讨论】:
-
y_train 和 y_test 的形状是什么?它可能表明您有四个类,而不是三个。
-
Y_train 和 y_test 各有 3 个独特的类,1,2 和 3,而不是 4 个类。当我们进行二元分类时,为什么我们使用 1?
-
如果你使用类索引 1,2,3,你有三个类,但是 keras 使用从零开始的索引,这就是为什么当你执行 to_categorical 时它会输出四个类,而不是三个。只需将您的类索引转换为从零开始。
-
怎么做?你能告诉我。
-
y_train = y_train - 1 在做 to_categorical 之前,同样适用于 y_test。
标签: python keras deep-learning lstm convolutional-neural-network