Keras密集层输出-形状错误

时间:2018-06-27 06:44:19

标签: python keras deep-learning lstm convolutional-neural-network

我正在研究LSTM的NLP问题。问题是具有3个类别(1,2和3)的多类别分类。因此,我使用以下代码转换了目标类:extends BaseCrudService<UserEntity>,并类似地转换了y_train=to_catgorical(y_train)。 但是在我写y_test的输出密集层中,出现以下错误:

  

检查目标时出错:预期density_1具有形状(无,3),但具有形状的数组(658118,4)

但是,当我将其修复为model.add((Dense(3,activation='softmax'))时,即n + 1(n =要预测的类数),它可以工作。 但是在Keras的示例中,他们使用了cifar10数据集,并且使用的类数为10,而不是11,并且可以使用。 同样在二进制分类的情况下(要预测2个类),我们仅使用1个输出,即model.add((Dense(4,activation='softmax'))。 我经历了this post,但仍然无法找到令人信服的逻辑,因此我想通过Keras中的Dense层输出形状来清除此概念。

P.S。据我所知,Keras考虑了model.add(Dense(1,"sigmoid"))中的类,因此我们必须再进行一次转换。但是要问一件事,那么“ 0”向量层必须保留未使用的权利吗?在cifar10数据集的情况下,是否类是0:num_classes,这就是为什么num_classes = 10起作用的原因?如果是这样,那么如果我们必须对3个类(0、1和2)进行预测,那么我们可以使用num_classes = 3对吗?

1 个答案:

答案 0 :(得分:0)

也许重要的是要注意使用Keras框架来提供一种热编码功能:

from keras.datasets import cifar10
from keras.utils import np_utils    
y_label_train_OneHot = np_utils.to_categorical(y_label_train)
y_label_test_OneHot = np_utils.to_categorical(y_label_test)

您可以看到此代码code 简而言之,我个人认为使用不同的功能会导致不同的类别集。