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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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