神经网络中的填充是什么


简介

填充是卷积神经网络中使用最广泛的概念之一。对于每个神经网络工程师和深度学习工程师来说,这是一个众所周知的概念,可以有效地从深度学习中给定的数据集中提取有用的信息。

在本文中,我们将讨论填充,它是什么,为什么我们需要在神经网络中进行填充,它的意义是什么,以及如何使用代码示例在神经网络中应用填充。本文将帮助读者从零开始理解填充,并在需要时应用它。

什么是填充?

在直接进入填充的概念之前,让我们讨论卷积神经网络及其用例。卷积神经网络是一种智能神经网络,它使用图像数据集。在这里,网络将图像作为输入,并识别数据的不同模式和行为。根据对输入图像数据集的识别,输出将被提供。

现在,图像大小以像素为单位,每个不同的图像数据集可以具有不同大小的图像,并且神经网络也应该根据输入图像大小进行优化。

填充是在输入图像(在其边界)中添加的一种额外图层。例如,假设我们有一个大小为 10*10 像素的输入图像,那么我们可以在图像中添加一层填充,这将使图像的大小增加到 11*11。

通过向输入图像添加额外的像素层,我们获得了几个优点,最终增强了卷积神经网络模型的性能。

大多数情况下,我们添加一个填充为零的额外层,这称为零填充。它将在图像外部的添加的额外层中包含所有零。

现在让我们讨论填充的意义以及需要向图像添加填充层的原因。

为什么要添加填充?

在神经网络中,尤其是在处理图像数据集时,填充提供了许多优势。

信息丢失

在使用卷积神经网络时,我们有一张图像,在其上应用内核或滤波器,它基本上对输入图像执行运算并返回一个大小可能更小的图像。

例如,如果我们有一个大小为 10*10 像素的图像,并且如果将 3*3 滤波器应用于图像,则输出图像的大小将为 8*8 像素,小于实际图像,因此我们丢失了来自实际重要图像的一些信息。

在这种情况下,添加额外的填充层可以增强输入图像的大小;此外,图像的输出层将是填充层,其中包含零,因此在应用滤波器后,填充层的信息将丢失,而不是图像实际部分的核心信息。

外部部分信息

在某些情况下,我们实际上对图像的中间部分不感兴趣。相反,我们对图像的外部部分感兴趣,其中可能包含一些对模型训练非常有用的信息。在这种情况下,来自图像外部部分的像素读取或像素观察对于模型的训练至关重要。

现在,当将滤波器应用于实际图像时,它会减小实际图像的大小,并且来自图像外部部分的像素信息可能会丢失。

填充在这种情况下将节省我们,其中额外的像素层最终将使图像的外部部分成为中心部分。因此,滤波器或内核将关注这一点,其中来自外部部分的信息不会丢失,并将被视为模型训练的重要参数。

相同的输入大小

正如我们上面讨论的那样,应用内核或滤波器可能会减小实际图像的大小,这可能会导致某些信息丢失。在某些情况下,我们可能需要图像的精确大小,而这在应用滤波器后也无法实现。

在这种情况下,在输入层中添加额外的填充层最终将增强实际图像的大小,这将导致在将滤波器应用于同一图像后减小输入图像的适当大小。

例如,如果我们有一个大小为 10*10 像素的图像,并且如果我们正在应用大小为 3*3 像素的滤波器,则输出图像的大小将为 8*8 像素。但是,向输入层添加一层填充最终将增强输出图像的大小,这将为 10*10 像素。

示例

现在让我们讨论在神经网络中实现填充。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D

# Create a Sequential model
model = Sequential()

# Add a convolutional layer with padding='valid' (no padding)
model.add(Conv2D(32, kernel_size=(3, 3), padding='valid', activation='relu', 
input_shape=(28, 28, 3)))

# Add another convolutional layer with padding='same'
model.add(Conv2D(64, kernel_size=(3, 3), padding='same', activation='relu'))

# Print the model summary
model.summary()

输出

Model: "sequential"
_________________________________________________________________
 Layer (type)            Output Shape           Param #   
=================================================================
 conv2d (Conv2D)          (None, 26, 26, 32)      896      
                                                 
 conv2d_1 (Conv2D)         (None, 26, 26, 64)      18496    
                                                 
=================================================================
Total params: 19,392
Trainable params: 19,392
Non-trainable params: 0
_________________________________________________________________

在上面,我们可以看到我们在神经网络的层中应用了填充,这将在图像中添加额外的像素层,并将相同的像素层传递到下一层。

这里 padding = valid - 意味着不会添加任何像素,padding = same - 意味着模型将自动尝试在填充的帮助下使输入和输出图像的大小相同。

结论

在本文中,我们讨论了神经网络中的填充,它们是什么,它们的意义是什么,以及如何向神经网络添加填充。本文将帮助读者理解填充,并在需要时应用它。

更新于:2023年8月17日

289 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告