Keras / Theano:如何添加Convolution2D图层?

时间:2015-06-29 00:36:25

标签: neural-network convolution theano conv-neural-network keras

我在如何理解如何添加Convolution图层方面存在问题。 我试图添加Convolution图层,但我收到此错误:

ValueError: GpuCorrMM shape inconsistency:
  bottom shape: 128 32 30 30
  weight shape: 3 32 3 3
  top shape: 128 1 28 28 (expected 128 3 28 28)

Apply node that caused the error: GpuCorrMM_gradInputs{valid, (1, 1)}(GpuContiguous.0, GpuContiguous.0)
Inputs types: [CudaNdarrayType(float32, 4D), CudaNdarrayType(float32, 4D)]
Inputs shapes: [(3, 32, 3, 3), (128, 1, 28, 28)]
Inputs strides: [(288, 9, 3, 1), (784, 0, 28, 1)]
Inputs values: ['not shown', 'not shown']

我试图理解什么是nb_filter,stack_size,nb_row,nb_col在卷积层上。

我的目标是复制VGG模型。

model = Sequential()

model.add(Convolution2D(32, 1, 3, 3, border_mode='full'))
model.add(Activation('relu'))
model.add(Convolution2D(32, 32, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(poolsize=(2, 2)))
model.add(Dropout(0.25))

model.add(Convolution2D(64, 32, 3, 3, border_mode='full'))
model.add(Activation('relu'))
model.add(Convolution2D(64, 64, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(poolsize=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(64*8*8, 512))
model.add(Activation('relu'))
model.add(Dropout(0.5))

model.add(Dense(512, nb_classes))
model.add(Activation('softmax'))

# let's train the model using SGD + momentum (how original).
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)

- 我目前正在使用Theano和keras。

请提出任何建议。

1 个答案:

答案 0 :(得分:0)

您需要更正卷积图层的输出形状。 CNN层的输出取决于许多因素,例如输入大小,内核数量,步幅和填充。通常对于大小为BxCxW1xH1的输入,输出为BxFxW2xH2,其中B是批量大小,C是输入通道,F是输出要素的数量,W1xH1是输入大小,您可以使用W2和H2计算W2和H2的值W1,H1,步幅和填充。斯坦福大学本教程中对此进行了很好的说明:http://cs231n.github.io/convolutional-networks/#comp

希望它有所帮助!