我对如何理解卷积层的添加有问题。我试图添加卷积层,但我得到了这个错误:
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。
请给我小费。
您需要校正卷积层的输出形状。CNN层的输出取决于许多因素,如输入大小、内核数量、步长和填充。通常,对于大小为BxCxW1xH1的输入,输出将为BxFxW2xH2,其中B是批量大小,C是输入通道,F是输出特征的数量,W1xH1是输入大小,您可以使用W1、H1、步幅和填充来计算W2和H2的值。斯坦福大学的这篇教程很好地说明了这一点:http://cs231n.github.io/convolutional-networks/#comp
希望它能有所帮助!