#pic_center
R 1 R_1 R1
R 2 R^2 R2
填充的思想很简单,就是在输入数据的周围增加额外的行和列,从而使输出数据的尺寸比原来更大。下面通过一个示例来说明。原始输入如下:
原始输入:
[ 1 2 3 ]
[ 4 5 6 ]
[ 7 8 9 ]
现在在输入数据的上、下、左、右分别进行填充,填充的值为 0,如下所示:
填充后的输入:
[ 0 0 0 0 0 ]
[ 0 1 2 3 0 ]
[ 0 4 5 6 0 ]
[ 0 7 8 9 0 ]
[ 0 0 0 0 0 ]
填充完成之后,再进行卷积操作。通过卷积操作滑动窗口,可以观察到以下效果:原来的输出是一个 2x2 的矩阵,而填充后的输入输出变为了一个 4x4 的矩阵。可以看到,输出比输入多了一行和一列,这就是填充的效果。填充在卷积操作中用于调整输出的尺寸,使其更大或更适应特定的任务需求。这种技术在卷积神经网络中被广泛使用。
一般情况下,我们会定义填充参数,通常记作 p_h 表示在高度方向(行)填充的行数,以及 p_w 表示在宽度方向(列)填充的列数。这会改变输出的形状。具体来说,填充后的输出形状可以通过以下公式来计算:
新的输出高度(n_h)= 输入高度 n_h - k_h+ p_h+1
新的输出宽度(n_w)= 输入宽度 n_w- k_w + p_w+1
如果没有进行填充,即 p_h = p_w = 0,那么新的输出形状;
通常,我们选择 p_h 和 p_w 的值等于卷积核的高度 kh 减去 1 和宽度 kw 减去 1,即 p_h = kh - 1 和 p_w = kw - 1。这是一个常见的选择,它的好处是可以确保将整个像素值带入卷积操作后,整个项仍然是零。这意味着输出形状不会发生变化,而将保持为 n_h 乘以 n_w。
具体来说,如果填充高度 p_h 为奇数,填充就会分别在输入的顶部和底部各填充 p_h 除以 2 行,通常填充值为 0。如果卷积核的高度 kh 为偶数,填充有时候会稍有变化。在这种情况下,可以选择在上部填充多一行,而在下部填充少一行,或者反过来。但一般情况下,不会影响输出形状太多。
总之,填充是卷积操作中常用的技术,用于控制输出形状,保持特定的图像维度,使其适应网络结构或任务需求。
首先,我们来讨论一下二维最大池化层的工作原理。它的工作方式与之前的卷积操作有一些相似之处,都涉及到一个窗口在输入上滑动。让我们以一个示例来说明,这里有一个3x3的窗口,不断滑动在输入上。最后的输出与之前的卷积层输出类似,但有一些不同。在这里,我们没有核与输入进行卷积和相加的过程,而是将窗口内的最大值提取出来,这就是为什么它称为"最大"池化层。
举个例子,假设我们有一个2x2的最大池化窗口。每次我们在输入上滑动这个2x2的窗口,然后窗口内的最大值就会成为输出的一部分。让我们来看一个例子,当窗口滑动到这个位置时,窗口内的最大值是4,所以输出值就是4。同样地,如果窗口滑到这个位置,输出值就是5。继续滑动窗口,下一个窗口的最大值是7,最后一个窗口的最大值是8。
因此,最大池化层的工作原理可以简单地概括为:通过滑动窗口计算输出,但与卷积不同,它不进行加权相加,而是将窗口内的最大值提取出来作为输出。
当然,这个事情实际上一直被忽视。LeNet这个模型在很长一段时间内并没有引起广泛的注意,因为深度神经网络在那个时候并不流行。事实上,LeNet的知名度在当时相对较低。然而,值得一提的是,那个时候最知名的数据集之一就是MNIST数据集。如果你正在学习机器学习,很有可能你的第一个数据集就是MNIST。这个数据集也是LeNet网络最早提出时附带的一个数据集。
然而,正是LeNet在MNIST数据集上取得了出色的表现,这使得深度神经网络引起了人们的注意。当时,人们认为深度神经网络在大数据上表现出色,比传统的机器学习算法如支持向量机(SVM)等要好。这可以被视为当时的“大数据”,对于神经网络来说,这是一个里程碑。希望这能帮助您更好地理解LeNet和MNIST数据集的历史重要性。