如何在keras conv层中进行零填充?

时间:2017-07-10 13:14:47

标签: python machine-learning keras padding conv-neural-network

我正在尝试从科学文章中实现模型,该文章说它们使用零填充。是否可以在keras Conv2D

中配置此填充

我看到的只有填充的可能值是

  

填充:"有效"之一或"相同" (不区分大小写)。

是否可以用零或其他常量值填充?

5 个答案:

答案 0 :(得分:9)

“相同”表示零填充。目前无法以有效的方式填充其他常量。

答案 1 :(得分:3)

使用padding='valid'时没有填充。

当将padding='same'strides=1一起使用时,输入将被补零,因此输出的宽度和高度与输入相同。如文档中所述,后端strides!= 1时,“相同”在后端有点不一致。

如果您要手动设置填充值,也许最简单的方法是在Conv2D之前添加ZeroPadding2D层。

例如,ZeroPadding2D(padding=((1,2),(3,4)))将在左侧添加1个尺寸,在右侧添加2个尺寸,在顶部添加3个尺寸,在底部添加4个尺寸。 ZeroPadding2D(5)将在所有4个边界上增加5个维度。

(顺便说一句,这是后端函数spatial_2d_padding的包装层)

答案 2 :(得分:2)

看看spatial_2d_padding功能。它用零填充张量。

答案 3 :(得分:0)

我认为padding ='same'的意思是,如果我们处于隐藏层中,则步长找到的空单元格将使用前一层的值填充而不是零,只有输入层将被填充零。

答案 4 :(得分:0)

https://keras.io/layers/convolutional/

ZeroPadding2D =>

keras.layers.ZeroPadding2D(padding =(1,1),data_format = None) 二维输入(例如图片)的零填充层。

此层可以在图像张量的顶部,底部,左侧和右侧添加零行和列。

参数

填充:int,或2个整数的元组,或2个int的2个元组的元组。 如果为int,则将相同的对称填充应用于高度和宽度。 如果元组为2 ints:解释为高度和宽度的两个不同的对称填充值:(symmetric_height_pad,symmetric_width_pad)。 如果2个元组的2个整数的元组:解释为(((top_pad,bottom_pad),(left_pad,right_pad))

data_format:字符串,“ channels_last”或“ channels_first”之一。输入中尺寸的顺序。 “ channels_last”对应于具有形状(批处理,高度,宽度,通道)的输入,而“ channels_first”对应于具有形状(批处理,通道,高度,宽度)的输入。它默认为在〜/ .keras / keras.json中的Keras配置文件中找到的image_data_format值。如果您从未设置,那么它将是“ channels_last”。