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

问题描述 投票:1回答:2

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

enter image description here

可以看出,第二卷积层具有256个大小为5×5的滤波器,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个频道,我是否需要明确它?

python tensorflow keras computer-vision conv-neural-network
2个回答
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中找到填充图层的文档(它一直在底部)。


2
投票

你有valid填充权,请注意使用此参数后图层的宽度和高度将会更小。

另一方面,填充same意味着将使用特定的填充大小来确保图像尺寸不会改变。

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

如果你想在卷积层check first answer to this Quora question后计算输出大小的公式。

我很少(如果有的话)看到不同的填充方案,所以那些通常就足够了。

BTW。 AlexNet中的所有图层都使用填充same,除了第一个(正如在评论中正确指出的另一个答案)。

© www.soinside.com 2019 - 2024. All rights reserved.