2017-06-15 176 views
1

我想用Keras创建VGG模型。VGG Keras中的尺寸不匹配

但显示以下错误,

预期lstm_input_2有4个维度,但得到了阵列状(60000,10)

我创建了下面的顺序模型。

model = Sequential() 
model.add(Conv2D(16, kernel_size=(3, 3), 
       padding='same', 
       input_shape=input_shape)) 
model.add(Activation('relu')) 
model.add(Conv2D(16, (3, 3), activation='relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Conv2D(32, (3, 3), padding='same', activation='relu')) 
model.add(Conv2D(32, (3, 3), activation='relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Conv2D(64, (3, 3), padding='same', activation='relu')) 
model.add(Conv2D(64, (3, 3), activation='relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dense(50, activation='relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(num_classes)) 
model.add(Dropout(0.5)) 
model.add(Activation('softmax')) 

请告诉我为什么会出现此错误。

+2

'lstm_input'不是您的VGG模型中很可能的一部分。你能提供更完整的代码和完整的错误日志吗?由于错误是指您的输入形状:您如何提供数据? – petezurich

+0

为了完整起见,从VGG开始的最简单方法是从Keras应用程序导入它:https://keras.io/applications/#vgg16 – petezurich

回答

0

你只需要添加一个展平层,像这样:

… 
model.add(MaxPooling2D(pool_size=(2, 2))) 

model.add(Flatten()) # <-- this layer is missing in your code 

model.add(Dense(50, activation='relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(num_classes)) 
model.add(Dropout(0.5)) 
model.add(Activation('softmax')) 
… 

这将您的最后一个2D层(MaxPooling2D)到一维形状,你可以比送入您的致密层。