我正在尝试用Keras实现AlexNet,并且正在检查MATLAB中的网络设计,如下所示:
可以看出,第二卷积层具有256个大小为5x5的滤波器,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个通道,我需要对此进行明确说明吗?
答案 0 :(得分:3)
没有在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中找到用于填充图层的文档(始终在底部)。
答案 1 :(得分:2)
您正确填充了valid
的填充,请注意,使用该参数的图层的宽度和高度会变小。
填充same
表示将使用特定的填充大小来确保图像尺寸不会更改。
对于您的特定情况,如果您在每侧填充2
像素的输入图像,您将获得与图层输出完全相同的图像尺寸。因此,指定same
将执行与[2 2 2 2]
完全相同的填充。
如果要使用公式来计算卷积层check first answer to this Quora question之后的输出大小。
我很少(如果有的话)见过不同的填充方案,因此通常就足够了。
顺便说一句。 AlexNet中的所有图层都使用填充same
,但第一个除外(如对另一答案的注释中正确指出的那样)。