我正在尝试使用TF后端在Keras中实现卷积神经网络,对111个大小为141 x 166的图像进行图像分割 . 当我运行下面的代码时,我收到错误消息:

检查目标时出错:期望dense_36有2个维度,但得到的数组有形状(88,141,166,1)

我的X_train变量是形状(88,141,166,1)以及y_train变量 . 我的X_test变量是形状(23,141,166,1)以及y_test变量,由sklearn中的函数train_test_split分割 .

我不确定错误消息的含义是 dense_36 . 我已经尝试在拟合模型之前使用Flatten()函数,但它说我有一个ndim = 2并且不能展平 .

# set input
batch_size = 111
num_epochs = 50
img_rows = 141
img_cols = 166
input_shape = (img_rows, img_cols, 1)
num_classes = img_rows*img_cols

# split training and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 4)
X_train = X_train.astype('float32')
X_test = X_train.astype('float32')

# CNN itself
model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), activation='relu', 
input_shape=input_shape))
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

# compile CNN
model.compile(loss=keras.losses.categorical_crossentropy, 
optimizer=keras.optimizers.Adadelta(), metrics=['accuracy'])

# fit CNN
model.fit(X_train, y_train, batch_size=batch_size, epochs=num_epochs, 
verbose=1, validation_data=(X_test, y_test))

我的模型摘要是:

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_35 (Conv2D)           (None, 139, 164, 32)      320       
_________________________________________________________________
conv2d_36 (Conv2D)           (None, 137, 162, 64)      18496     
_________________________________________________________________
max_pooling2d_18 (MaxPooling (None, 68, 81, 64)        0         
_________________________________________________________________
dropout_35 (Dropout)         (None, 68, 81, 64)        0         
_________________________________________________________________
flatten_28 (Flatten)         (None, 352512)            0         
_________________________________________________________________
dense_33 (Dense)             (None, 128)               45121664  
_________________________________________________________________
dropout_36 (Dropout)         (None, 128)               0         
_________________________________________________________________
dense_34 (Dense)             (None, 2)                 258       
_________________________________________________________________
Total params: 45,140,738
Trainable params: 45,140,738
Non-trainable params: 0
_________________________________________________________________
None