神经网络 🐯 中的零 🕊 填充和脂肪 🪴
零填充在输入或输出 🦆 张量周围 🐧 填充 🐦 零值。
目的:保留 🐘 空间维度信 ☘ 息 🌸
控制 💐 卷积或池化操作的输出大小
脂肪零 🦉 填充之外的附加填充。
目的:提 💐 供 🌵 额外的上下文 🌸 信息
避免特征 🐯 图边缘的信息 🌷 丢 🦟 失
零填 🌼 充与脂肪的不 🕸 同
| 特征 | 零 | 填 🪴 |充脂肪 🌾
||||| 类 ☘ 型 | 内置 🐡 padding | 外 padding |部 🐦
| 值 | 零 | 可 🦁 |选
| 目的 | 保 | 留 |空间维度提供 🌼 背景
| 影 🐘 响 | 输 | 出 |大小模型复 🍀 杂度
使 💮 用零填充和脂肪 🌹
卷积层:零填充用 🐬 于控制输出大小,脂肪用于增加接受域。
池 🦆 化层:零填 🐵 充用 ☘ 于保留空间维度,脂肪未使用。
转置 🐯 卷积层:零填充用于将输出大小扩大到输入大小,脂肪未使用。
示例考虑一个输 🐴 入形状 🌳 为 [3, 224, 224] 的图像,使用内核大小为的 🐝 3 卷积层:
零 🦄 填充为 🍁 1:输出形状为 [3, 224, 224]
脂肪为 🦁 1:输出形状为 [3, 226, 226]
注意事项过度使用脂肪会增加模型复杂度和训 🕸 练 🐕 时间。
对 🍀 于需要区分特征图边缘的信息的任务,零填充 🦍 和脂肪可能很重要。
卷积神经网络 (CNN) 填充方式 🕷
卷积操作是 CNN 的核心,在卷积,过程中填充操作(padding)决定 🐟 如何处理输入张量边缘的像素填充。方式有四种:
1. 零填 🦄 充(Zero Padding)
最简单的填充方式。用 0 值填充。输。入张量边缘的像素这种填充方式 🐕 可以保持输入张量的大小
2. 互为 🐛 镜 🐒 像填 🕷 充(Reflect Padding)
将输入张量边缘的像 🦁 素镜像复制到边缘。这。种填充方式可以模 🦊 拟图像边界周围的反射效应
3. 复 🐵 制边界填充(Replicate Padding)
与零填充类似,但用输入张量边缘的像素值本身填充边缘。这。种 🐯 填 🐶 充方式可 🌼 以防止边缘像素信息的丢失
4. 常 🐳 数 🐦 填 🐘 充(Constant Padding)
用一个常数值填充输入张量边缘的像素。这。种填充方式可以为 🦅 网络学习输入张量边缘的特性提供一个偏置
选 🦢 择填充方式的考虑因素:
数据类 🌾 型:图像中是否存在边缘特征。
卷积核大 🐈 小:较大的卷积核需要更多的填充。
网络的目的:不同填充方式可能导致不同的 🐯 结果。
在 TensorFlow 中 🕸 实 🐳 现填充:
python
import tensorflow as tf
创建一 🐋 个 🌼 张量 🦍
x = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
使 🦢 用零 🌿 填 🌲 充
zero_padded = tf.pad(x, [[1, 1], [1, 1]], mode="CONSTANT", constant_values=0)
使用互为镜像 🐬 填 🐅 充 🐱
reflect_padded = tf.pad(x, [[1, 1], [1, 1]], mode="REFLECT")
使用复制 🌲 边界填充
replicate_padded = tf.pad(x, [[1, 1], [1, 1]], mode="SYMMETRIC")
卷积 🐬 神经网络中的零填充
定义零填充是在输入数据周围添加零值边界的 💐 技术,它在应用卷积操作之前进行。
目的零填充主要用于以下 🌾 目 🐧 的 🐧 :
控制卷 🐳 积输出大小:通过在输入周围添加零,可以 🌼 增大或减小卷积输出的大小。
防止边缘效应:卷积操作通常会导致输出图像比输入图像小。零填充可以帮助防止边缘像素丢 🕊 失,从。而缓解边缘效应
保持特征映射大小 🌷 :在某些情况下,我们需要保持特征映射的大小与输入图像相同。零。填充可以帮助实现这一点
如 🐒 何应 🌺 用零填充
零填充可以通过以下步骤应 💐 用:
1. 在原始输入 🪴 图 💐 像周围添加一层或 🐼 多层零值。
2. 将填 🐳 充后的图 🦁 像作为 🍀 卷积操作的输入。
填充类型有两种主要 🦉 的零填充类型:
相等填充 🌹 :在各个维度上添加相等数量的零值,从而 🦊 使填充后的图像大小与原始图像相同。
非 🐶 相等填充:在不同 🐼 维度上添加不同数量的零值,从而修改填充后图像的大小。
优点零填充具有以下 🐼 优点:
防 ☘ 止 🐅 边缘效 🌺 应
控制卷积 🌿 输出大小 🦅
保持特征映 🐱 射大小
示例考虑一个 3x3 输 3x3 入图像和一个卷积核。如果不使用零填 🦉 充卷积,操 🐠 作将产生一个输 1x1 出图像。
通过在输入周围添加一层零填充填充,后图像变为 5x5。应,用卷积后输出变为 3x3,与输入图像。大 🐧 小相同
结论零填充是卷积神经网络中一种有用的技术,它允许控制输出大小、防止边缘效应并保持特征映射大小。通,过,在输。入数 ☘ 据周围添加零值零填充增强了卷积操作的灵活性使其在各种图像处理任务中更有效
卷积神 🐯 经网络中的填充
填充是在卷积操作中添加额外的元素,以控制输出 🦅 特征图的大小。它可以分为两种类型:
1. 零 🌸 填 🐎 充 🌳
在输入 🦉 特征图的边缘 🐬 周围添加零。
不会改变 🍀 输 🐒 出特征图的大小。
避免 🦄 边缘信息的丢失。
2. 反 🐕 射填 🦋 充
在輸 🕊 入特征 🍀 圖的边缘周圍鏡像元素。
輸出特征圖的邊緣 🌺 與輸入邊緣相同。
避免邊緣出現 🍀 不連 🍀 續。
填充的目的填 🐞 充的主要目 🍁 的 🍁 有:
控制输 🦊 出 🐝 特征图的大小 🕸 :
使用零填 ☘ 充可保持输出大小不变。
使用反 🦈 射填 🦋 充可使输出大小为 🐛 输入大小的倍数。
保留 🦋 边缘信息:
零填充可防止 🐋 边缘元素丢失 🌻 ,从而避免边缘信息的丢失。
避免分形 🕸 化 🦢 :
反射填充 🐴 可确保输出边缘元素不零,防,止分 🐛 形化即输出中空洞的出现。
填充的选择填充类型 🕷 的选择取决于具体应用 🌷 :
图像分类:通常使用零填充,以保持输出特征图的 🌴 大小不变。
图像分割:通常使用反射填充,以避免分形化和 🍀 保留边缘信息。
目标检 🌼 测:两种填充都 💮 可以使用,具体取决于所使用的 🌺 模型。
实施在 TensorFlow 和 PyTorch 等深度学习框架中,可以使用以下方式实 🪴 现填充:
TensorFlow:`tf.pad()`
PyTorch:`torch.nn.ReflectionPad2d()`、`torch.nn.ZeroPad2d()`
示例以下 🦊 示例展示了在 TensorFlow 中 🦊 使用零 🐺 填充:
python
import tensorflow as tf
输入特征图,形 💮 状为 🌴 [1, 28, 28, 1]
input_tensor = tf.random.normal([1, 28, 28, 1])
使 🐺 用零填充填 🐶 充,大小为 2
padded_tensor = tf.pad(input_tensor, [[0, 0], [2, 2], [2, 2], [0, 0]], "CONSTANT")
输出特征图 🐬 ,形状 🦁 为 [1, 32, 32, 1]
print(padded_tensor.shape)