神经网络 卷积神经网络的填充padding
在使用卷积神经网络时,填充是最常用的概念之一。对于每个神经网络工程师和深度学习工程师来说,这是一个最熟悉的概念,可以从给定的数据集中有效地提取有用信息。
在本文中,我们将讨论填充,它是什么,为什么我们需要在神经网络中添加填充,其重要性是什么,以及我们如何使用代码示例在神经网络中应用填充。本文将帮助读者从零开始理解填充,并在必要时应用它。
什么是填充
在直接讨论填充的概念之前,让我们讨论卷积神经网络及其用途。卷积神经网络是一种智能神经网络,用于处理图像数据集。网络将图像作为输入,并识别数据的不同模式和行为。根据输入图像数据的识别结果,输出被提供。
现在这里的图像大小以像素为单位,每个不同的图像数据集都可能具有不同大小的图像,神经网络应根据输入图像大小进行优化。
填充是一种额外的图层,添加到输入图像(在其边界上)。例如,假设我们有一个大小为1010像素的输入图像,那么我们可以给图像添加一层填充,将图像的大小增加到1111。
通过在输入图像中添加一个像素的额外图层,我们可以获得一些优势,从而提高卷积神经网络模型的性能。
通常,我们使用零来添加一个额外的层,这被称为零填充。添加的额外层在图像的外部部分都包含零。
现在让我们讨论填充的重要性以及为什么需要在图像中添加填充层。
为什么要添加填充
在神经网络中,特别是在处理图像数据集时,填充提供了几个优势。
信息损失
在使用卷积神经网络时,我们对图像应用卷积核或过滤器,这些过滤器基本上是在输入图像上执行操作,并返回一个可能比实际图像更小的图像。
例如,如果我们有一个1010像素大小的图像,并且将一个33的过滤器应用于图像,那么输出图像的大小将为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)。填充会在图像上添加额外的像素,并将其传递给下一层。
这里的填充(padding) = valid – 这意味着不会添加任何像素,padding = same – 这意味着模型将自动尝试使用填充(padding)使输入和输出图像的尺寸相同。
结论
在本文中,我们讨论了神经网络中的填充(padding),它们是什么,它们的重要性是什么,以及我们如何向神经网络添加填充(padding)。这篇文章将帮助人们理解填充(padding)并在需要时应用它们。