ValueError:检查目标时出错:期望的dense_2有4个维度,但得到的是带有形状的数组(7942,1)

时间:2017-11-01 08:05:04

标签: python keras conv-neural-network convolution valueerror

我一直在使用以下功能API进行使用CNN的图像分类任务:

def create_model(X_train, X_test):

    visible = Input(shape=(X_train.shape[0], X_train.shape[1], 1))
    conv1 = Conv2D(32, kernel_size=4, activation='relu')(visible)
    hidden1 = Dense(10, activation='relu')(pool2)
    output = Dense(1, activation='sigmoid')(hidden1)

    model = Model(inputs = visible, outputs = output)

    model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

    return model

X_tr = np.reshape(X_train, (1,X_train.shape[0], X_train.shape[1], 1))
X_te = np.reshape(X_test, (1,X_test.shape[0],  X_test.shape[1], 1))

model = create_model(X_train, X_test)

model.fit(X_tr, y_train, validation_split = 0.1, batch_size=10, epochs=10, verbose = 1, callbacks=[EarlyStopping(patience=5,verbose=1)]) 

其中,X_train是一个7942 * 6400维度列表,y_train是一个带有相应7942标签的一维列表。

错误:

  

ValueError:检查目标时出错:期望dense_2有4   尺寸,但得到形状的阵列(7942,1)

由于我是功能API的新手,这里可能出了什么问题?

1 个答案:

答案 0 :(得分:1)

消息显示y_train与模型的输出不兼容。

您的模型正在输出(None, width, height, 1)。您应该在卷积后添加Flatten()图层,以使数据从此时起只有2个维度。

补充意见:

输入数据必须具有与模型兼容的形状。

X_train的形状必须为(7942,80,80,1)
模型的input_shape必须为(80,80,1)

如果使用(1,6400, 1)形状,则Conv2D图层将毫无用处,因为它无法将数据作为2D图像进行解释。