当我使用Keras构建卷积神经网络时出现了一些错误:
检查目标时出错:期望dense_11有4个维度, 但得到了阵形(48986,12)
由于我缺乏知识,我不知道该修复什么。有人可以解释原因并提出解决方案吗?
input_shape = (99, 81, 1)
nclass = 12
model = Sequential()
model.add(Dense(32, input_shape=input_shape))
model.add(Convolution2D(8,3,3,activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Dense(128, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(nclass, activation='softmax'))
x_train, x_valid, y_train, y_valid = train_test_split(x_train, y_train, test_size=0.1, random_state=2017)
#vgg
batch_size = 128
nb_epoch = 1
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
#model.fit(x_train,y_train,nb_epoch= nb_epoch,batch_size = batch_size , validation_split=0.1)
model.fit(x_train, y_train, batch_size=16, validation_data=(x_valid, y_valid), epochs=3, shuffle=True, verbose=2)
model.save(os.path.join(model_path, 'vgg16.model'))
x_train
的形状为(99,81,1),nclass
输出应为12
。
答案 0 :(得分:1)
再次查看错误:
"检查 目标 时出错:期望dense_11有4个维度,但是有阵列形状(48986,12)" - target = labels / output
意思是,输出形状存在某种问题。
让我们打印模型摘要以检查预期的输出形状:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 99, 81, 32) 64
_________________________________________________________________
conv2d_1 (Conv2D) (None, 97, 79, 8) 2312
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 48, 39, 8) 0
_________________________________________________________________
dense_2 (Dense) (None, 48, 39, 128) 1152
_________________________________________________________________
dense_3 (Dense) (None, 48, 39, 128) 16512
_________________________________________________________________
dense_4 (Dense) (None, 48, 39, 12) 1548
=================================================================
Total params: 21,588
Trainable params: 21,588
Non-trainable params: 0
_________________________________________________________________
最后一层输出形状预测:(无,48,39,12) 您可以看到这种情况正在发生,因为Dense图层的输入具有形状(无,48,39,8),并且根据Keras实现,Dense图层位于最后一个维度的顶部 - >含义:带有128个节点的密集层,其输入形状(无,48,39,8)将输出(无,48,39, 128 )。
解决方案取决于您想要做什么以及标签的形状(输出应该是什么)
例如,如果模型的输出形状应该是(nclass,1),那么您可以在MaxPool图层之后展平数据。
如果它应该是其他改变你的标签形状的东西(无,48,39,12)。