[英]How to specify padding with keras in Conv2D layer?
我正在尝试使用Keras来实现AlexNet ,并且正在检查MATLAB中的网络设计,如下所示
可以看出,第二卷积层具有256个大小为5x5的滤波器,48个通道和[2 2 2 2]的填充。 如何指定padding
的[2 2 2 2] padding
? 我浏览了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"))
我也强烈建议您检查一下alexnet的这种keras实现 。 请注意,您还可以在keras卷积文档中找到用于填充层的文档 (始终在底部)。
您的valid
填充正确无误,请注意,使用此参数进行分层后,宽度和高度会变小。
填充same
,另一方面是指特定的填充大小将被用来确保图像尺寸将不会改变。
对于您的特定情况,如果您在输入图像的每一侧填充2
像素,您将获得与图层输出完全相同的图像尺寸。 因此,指定same
将执行与[2 2 2 2]
完全相同的填充。
如果您想要在卷积层之后计算输出大小的公式, 请首先检查此Quora问题的答案 。
我很少(如果有的话)看到不同的填充方案,因此通常就足够了。
顺便说一句。 AlexNet中的所有层都使用same
的填充,但第一个除外(如对另一个答案的注释中正确指出的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.