【发布时间】:2018-03-12 02:34:43
【问题描述】:
我在尝试在 Keras 2.0.8、Python 3.6.1 和 Tensorflow 后端训练模型时遇到问题。
错误信息:
ValueError: 检查目标时出错:预期 dense_4 的形状为 (None, 2) 但得到的数组的形状为 (2592, 1)
X_train = numpy.swapaxes(X_train, 1, 3)
X_test = numpy.swapaxes(X_test, 1, 3)
print("X_train shape: ") --> size = (2592, 1, 1366, 96)
print("-----")
print("X_test shape") --> size = (648, 1, 1366, 96)
print("-----")
print(Y_train.shape) --> size = (2592,)
print("-----")
print("Y_test shape") --> size = (648,)
相关代码sn-ps:
K.set_image_dim_ordering('th')
K.set_image_data_format('channels_first')
def create_model(weights_path=None):
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),activation='relu', padding="same", input_shape=(1, 1366, 96)))
model.add(Conv2D(64, (3, 3), activation='relu', dim_ordering="th"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(16, activation='relu'))
model.add(Dense(2, activation='softmax'))
if weights_path:
model.load_weights(weights_path)
return model
model = create_model()
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.SGD(lr=0.01),
metrics=['accuracy'])
history = model.fit(X_train, Y_train,
batch_size=32,
epochs=100,
verbose=1,
validation_data=(X_test, Y_test))
第 142 行,我调用 model.fit() 是我收到此错误的地方
我已尝试解决此错误 引用了这些堆栈溢出帖子:
我尝试使用以下代码重塑 Y_test 和 Y_train numpy 数组:
Y_train.reshape(2592, 2)
Y_test.reshape(648, 2)
但是,我收到以下错误:
ValueError: 无法将大小为 2592 的数组重新整形为 (2592,2)
【问题讨论】:
-
您的 MCVE 即将完成。哪一行抛出错误?错误中还有 1336 vs 1366;确保逐字复制消息。
-
第 142 行,也就是我调用 model.fit() 时更新了问题。
-
好的,数字不匹配来自您的代码:
input_shape在Conv2D中有错误的值。我建议将输入的形状显式传递给create_model,而不是对其进行硬编码。像这样的幻数很容易出错。 -
抱歉,我在编写代码时似乎是一个错字。在修复
Conv2D中的input shape后,我得到错误:ValueError: Error when checks target: expected dense_4 to have shape (None, 2) but got array with shape (2592, 1).我会更新问题。 -
新错误很明显。为什么要尝试从 N 个元素重塑为 N*2 个元素?你真正想要实现的是什么?
标签: python-3.x machine-learning tensorflow deep-learning keras