如何修复预期的dense_11有4维度错误

时间:2017-12-30 06:26:46

标签: keras conv-neural-network

当我使用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

1 个答案:

答案 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)。

祝你好运:)