我正在尝试用Keras实现AlexNet,并在MATLAB中检查网络设计,如下所示
可以看出,第二卷积层具有256个大小为5×5的滤波器,48个信道和[2 2 2 2]的填充。我怎么能用Keras指定[2 2 2 2]的padding
?我经历了documentation of Conv2D。它只接受填充的2个值,即valid
和same
。我无法理解这一点。据我所知,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个频道,我是否需要明确它?
在Conv2D
中未指定特定填充,而是在ZeroPadding2D
层中指定。
valid
和same
实际上只是常见填充的缩写--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中找到填充图层的文档(它一直在底部)。
你有valid
填充权,请注意使用此参数后图层的宽度和高度将会更小。
另一方面,填充same
意味着将使用特定的填充大小来确保图像尺寸不会改变。
对于您的特定情况,如果您在每侧填充2
像素的输入图像,您将获得与图层输出完全相同的图像大小。因此,指定same
将执行与[2 2 2 2]
完全相同的填充。
如果你想在卷积层check first answer to this Quora question后计算输出大小的公式。
我很少(如果有的话)看到不同的填充方案,所以那些通常就足够了。
BTW。 AlexNet中的所有图层都使用填充same
,除了第一个(正如在评论中正确指出的另一个答案)。