Keras / Theano:如何添加 Convolution2D 层?

Posted

技术标签:

【中文标题】Keras / Theano:如何添加 Convolution2D 层?【英文标题】:Keras / Theano: How to add Convolution2D Layers? 【发布时间】:2015-09-15 08:39:09 【问题描述】:

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

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_gradInputsvalid, (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】:

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

希望对你有帮助!

【讨论】:

以上是关于Keras / Theano:如何添加 Convolution2D 层?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 Keras 后端是 tensorflow 还是 theano

如何使用 Theano 启用 Keras 以利用多个 GPU

如何在 Windows 上的 Anaconda Python 中安装 Keras 和 Theano?

注意力模型实现 Keras/Theano

使用 theano 后端加载 keras 模型时出现断言错误

keras 后端 theano/tensorflow