如何在Conv2D图层中使用keras指定填充?

时间:2019-04-15 17:47:34

标签: python tensorflow keras computer-vision conv-neural-network

我正在尝试用Keras实现AlexNet,并且正在检查MATLAB中的网络设计,如下所示:

enter image description here

可以看出,第二卷积层具有256个大小为5x5的滤波器,48个通道和[2 2 2 2]的填充。如何为Keras指定[2 2 2 2]中的padding?我经历了documentation of Conv2D。它仅接受2个填充值,即validsame。我不明白这一点。据我所知,valid表示零填充。如何指定第二个卷积层的[2 2 2 2]填充?我将第一层创建为:

model.add(keras.layers.Conv2D(filters = 96, kernel_size = (11,11), 
 strides = (4,4), padding = "valid", input_shape=(227,227,3)))

此外,由于在第二层中有48个通道,我需要对此进行明确说明吗?

2 个答案:

答案 0 :(得分:3)

没有在Conv2D中指定特定的填充,而是在ZeroPadding2D层中指定。

validsame实际上只是常见填充的简写-valid表示您不填充输入,same表示您添加填充以使输出长度与输入长度相同。

如果您要添加大小为2的特定填充,

model.add(keras.layers.ZeroPadding2D(padding=(2, 2)))
model.add(keras.layers.Conv2D(filters = 96, kernel_size = (11,11), strides = (4,4), padding = "valid"))

我也强烈建议您查看此keras implementation of alexnet。请注意,您还可以在the keras convolutional docs中找到用于填充图层的文档(始终在底部)。

答案 1 :(得分:2)

您正确填充了valid的填充,请注意,使用该参数的图层的宽度和高度会变小。

另一方面,

填充same表示将使用特定的填充大小来确保图像尺寸不会更改。

对于您的特定情况,如果您在每侧填充2像素的输入图像,您将获得与图层输出完全相同的图像尺寸。因此,指定same将执行与[2 2 2 2]完全相同的填充。

如果要使用公式来计算卷积层check first answer to this Quora question之后的输出大小。

我很少(如果有的话)见过不同的填充方案,因此通常就足够了。

顺便说一句。 AlexNet中的所有图层都使用填充same,但第一个除外(如对另一答案的注释中正确指出的那样)。