Keras: 预期 activation_3 的形状为 (None, 3),但得到的数组形状为 (5708, 1)

我想用Keras训练一个简单的多层感知器。我的输入(x_train)是一个np.array,每个数据点由一个300维向量表示。我的输出应该是一个0、1或2的类别。形状如下:x_train: (5708, 300)y_train: (5708,)形状: (300,)

shape = x_train[0].shapemodel = Sequential()model.add(Dense(32, input_shape=shape))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(16))model.add(Activation('relu'))model.add(Dense(num_classes))model.add(Activation('softmax'))model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])history = model.fit(x_train, y_train, epochs=5)

在调用 model.fit 之后,我得到了以下错误:

ValueError: Error when checking target: expected activation_3 to have shape (None, 3) but got array with shape (5708, 1)

哪里出错了?activation_3 是哪一层?


回答:

错误发生在比较你的网络输出(形状为5708 x 3)和你提供的y_train(形状为5708 x 1)时。

你的网络输出形状为批量大小 x 类别数,即5708 x 3(三个输出类别的概率分布),因此真实标签应该进行独热编码,以便能够使用分类交叉熵损失函数。

因此,对于任何300维的输入样本向量,真实标签应该为以下之一:[1, 0, 0], [0, 1, 0] 或 [0, 0, 1]。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注