首页 文章

Keras:期望activation_3有形状(None,3)但是有形状的数组(5708,1)

提问于
浏览
2

我不想用Keras训练一个简单的多层感知器 . 我的输入(x_train)是np.array,其中每个数据点由300维向量表示 . 我的输出应该是0,1或2类 . 形状:x_train:(5708,300)y_train:(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?

3 回答

  • 4

    将网络输出(形状5708 x 3)与提供的y_train(形状5708 x 1)进行比较时发生错误

    您的网络输出具有形状批量大小x Num类,即5708 x 3(三个输出类上的概率分布),因此地面真实标签应该是一个热编码,以便能够使用分类交叉熵

    因此,对于300个dims的任何输入样本向量,真实标签应该是[1,0,0],[0,1,0]或[0,0,1]中的任何一个

  • 1

    将您的y_train从 shape (5708,1) 转换为 shape (5708,3)

    from keras.utils import np_utils
    y_train=np_utils.to_categorical(y_train)
    
  • 0

    y_train的形状必须是(5708,num_classes) . 并且您必须使用keras.utils.to_categorical(labels,num_classes = 10)更改y_train的结构

相关问题