【发布时间】: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