python - Keras:预期 activate_3 具有形状 (None, 3),但得到的数组具有形状 (5708, 1)

标签 python tensorflow machine-learning neural-network keras

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

shape = x_train[0].shape
model = 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] 之一

关于python - Keras:预期 activate_3 具有形状 (None, 3),但得到的数组具有形状 (5708, 1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49690256/

相关文章:

python - 低损耗和非常非常低的精度

Python 在两个 QThread 之间发送信号

python - Emacs Inferior Python shell 使用每个 python-shell-send-region 命令显示发送消息

python - 为什么我的 RNN 学习将所有输入仅分类为 2 个可能分类中的 1 个?

neural-network - Tensorflow:无法将 feed_dict 键解释为 Tensor

python - Sklearn 朴素贝叶斯分类器,用于处理属于同一类的数据

machine-learning - 强化学习为什么需要MDP设置

python - 用 Pandas 中的另一个值替换某些列中的所有负值

python - 如何在 Django Admin 中使用 can_add_related