1

我对如何理解如何添加卷积层有疑问。我试图添加卷积层,但出现此错误:

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。

请,任何提示表示赞赏。

4

1 回答 1

0

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

希望能帮助到你!

于 2017-01-19T06:00:26.427 回答