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

Posted

技术标签:

【中文标题】如何在 keras conv 层中进行零填充?【英文标题】:How to do zero padding in keras conv layer? 【发布时间】:2017-12-14 05:56:54 【问题描述】:

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

我看到的填充的唯一可能值是

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

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

【问题讨论】:

这里有更详细的keras padding layer的解释***.com/a/39371113/11239773 【参考方案1】:

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

【讨论】:

你怎么知道的?更可能的“相同”意味着填充相同的值,不是吗? “相同”一词指的是结果的形状,而不是其值。也就是说,返回的张量与输入的形状相同。 看起来“相同”的工作方式与在前面的 ZeroPadding2D 图层中使用“有效”时的工作方式不同。请在此处查看我的实验:***.com/questions/60323897/…【参考方案2】:

当您使用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的包装层)

【讨论】:

【参考方案3】:

看看spatial_2d_padding 函数。它用零填充张量。

【讨论】:

确实如此。这对于需要非标准填充的情况是理想的。卷积层具有padding='same' 选项,该选项将自动填充零以保持与输入相同的形状。但是,如果您想要卷积层本身不提供的东西,或者在其他情况下,这是正确的功能。 使用示例?【参考方案4】:

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

ZeroPadding2D=>

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

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

参数

填充:整数,或 2 个整数的元组,或 2 个整数的 2 个元组的元组。 如果是 int:相同的对称填充应用于高度和宽度。 如果 2 个整数的元组:解释为高度和宽度的两个不同的对称填充值:(symmetric_height_pad, symmetric_width_pad)。 If tuple of 2 tuples of 2 ints: 解释为 ((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”。

【讨论】:

【参考方案5】:

我认为 padding='same' 意味着如果我们在隐藏层中,stride 找到的空单元格将填充上一层的值而不是零,只有输入层才会被填充用零。

【讨论】:

以上是关于如何在 keras conv 层中进行零填充?的主要内容,如果未能解决你的问题,请参考以下文章

keras.layers.Conv2D的默认内核大小,零填充和步幅是什么?

keras.layers.Conv2D 的默认内核大小、零填充和步幅是多少?

卷积层(CNN)如何在 keras 中工作?

keras 中的因果填充

如何在 keras 中使用 Conv1D 和双向 LSTM 对每个时间步进行多类分类?

如何在 keras 中实现 Conv1DTranspose?