【问题标题】:ValueError: Error when checking target: expected dense_2 to have 4 dimensions, but got array with shape (7942, 1)ValueError:检查目标时出错:预期的 dense_2 有 4 个维度,但得到了形状为 (7942, 1) 的数组
【发布时间】:2018-04-13 12:25:20
【问题描述】:

我一直在使用以下功能性 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 的新手,这里可能出了什么问题?

【问题讨论】:

  • 如果X_train包含图片,那么这6400个值在图片中是如何分布的?什么是高度、宽度和通道?
  • 我正在从 csv 文件中读取特征值;每行包含 6400 个像素及其对应的标签;因此,我正在考虑的(高度、宽度、通道)是 (1, 6400, 1)。
  • 这行不通。如果它们是图像,它们就是 2D,例如 (800,800,1)。
  • 是的,它们最初是 80x80 图像,但我在 csv 文件中以一维数组的形式列出了所有像素强度值。还是不行吗?

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


【解决方案1】:

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

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


其他 cmets:

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

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

如果您使用(1,6400, 1) 形状,您的Conv2D 图层将毫无用处,因为它无法将数据解释为二维图像。

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2018-09-12
    • 2019-03-25
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多