吴恩达-深度学习-卷积神经网络-Padding 笔记

为了构建深度神经网络,你须要学会使用的一个基本的卷积操做就是padding,让咱们来看看它是如何工做的。网络


咱们在以前视频中看到,若是你用一个3×3的过滤器卷积一个6×6的图像,你最后会获得一个4×4的输出,也就是一个4×4矩阵。那是由于你的3×3过滤器在6×6矩阵中,只可能有4×4种可能的位置。这背后的数学解释是,若是咱们有一个的图像,用的过滤器作卷积,那么输出的维度就是(n-f+1)*(n-f+1)。在这个例子里是6-3+1=4,所以获得了一个4×4的输出。
spa

这样的话会有两个缺点:3d

第一个缺点是,每次作卷积操做,你的图像就会缩小,从6×6缩小到4×4,你可能作了几回以后,你的图像就会变得很小了,可能会缩小到只有1×1的大小。你可不想让你的图像在每次识别边缘或其余特征时都缩小,这就是第一个缺点。
orm


第二个缺点是,若是你注意角落边缘的像素,这个像素点(绿色阴影标记)只被一个过滤器输出所触碰或者使用,由于它位于这个3×3的区域的一角。但若是是在中间的像素点,好比这个(红色方框标记),就会有许多3×3的区域与之重叠。因此那些在角落或者边缘区域的像素点在输出中采用较少,意味着你丢掉了图像边缘位置的许多信息。
视频

为了解决这两个问题,一是输出缩小。当咱们创建深度神经网络时,你就会知道你为何不但愿每进行一步操做图像都会缩小。好比当你有100层深层的网络,若是图像每通过一层都缩小的话,通过100层网络后,你就会获得一个很小的图像,因此这是个问题。另外一个问题是图像边缘的大部分信息都丢失了。blog


为了解决这些问题,你能够在卷积操做以前填充这幅图像。在这个案例中,你能够沿着图像边缘再填充一层像素。若是你这样操做了,那么6×6的图像就被你填充成了一个8×8的图像。若是你用3×3的图像对这个8×8的图像卷积,你获得的输出就不是4×4的,而是6×6的图像,你就获得了一个尺寸和原始图像6×6的图像。习惯上,你能够用0去填充,若是是填充的数量,在这个案例中,p = 1,由于咱们在周围都填充了一个像素点,输出也就变成了(n+2p-f+1)*(n+2p-f+1),因此就变成了(6+2*1-3+1)*(6+2*1-3+1)=6*6,和输入的图像同样大。这个涂绿的像素点(左边矩阵)影响了输出中的这些格子(右边矩阵)。这样一来,丢失信息或者更准确来讲角落或图像边缘的信息发挥的做用较小的这一缺点就被削弱了。
ci

刚才我已经展现过用一个像素点来填充边缘,若是你想的话,也能够填充两个像素点,也就是说在这里填充一层。实际上你还能够填充更多像素。我这里画的这种状况,填充后
数学


至于选择填充多少像素,一般有两个选择,分别叫作Valid卷积和Same卷积。
it

Valid卷积意味着不填充,这样的话,若是你有一个n*n的图像,用一个f*f的过滤器卷积,它将会给你一个(n-f+1)*(n-f+1)维的输出。这相似于咱们在前面的视频中展现的例子,有一个6×6的图像,经过一个3×3的过滤器,获得一个4×4的输出。class

另外一个常常被用到的填充方法叫作Same卷积,那意味你填充后,你的输出大小和输入大小是同样的。根据这个公式n-f+1,当你填充个像素点,n就变成了n+2p,最后公式变为n+2p-f+1。所以若是你有一个n*n的图像,用p个像素填充边缘,输出的大小就是这样的(n+2p-f+1)*(n+2p-f+1)。若是你想让n+2p-f+1=n的话,使得输出和输入大小相等,若是你用这个等式求解p,那么p =(f-1)/2。因此当f是一个奇数的时候,只要选择相应的填充尺寸,你就能确保获得和输入相同尺寸的输出。这也是为何前面的例子,当过滤器是3×3时,和上一张幻灯片的例子同样,使得输出尺寸等于输入尺寸,所须要的填充是(3-1)/2,也就是1个像素。另外一个例子,当你的过滤器是5×5,若是f=5,而后代入那个式子,你就会发现须要2层填充使得输出和输入同样大,这是过滤器5×5的状况。

习惯上,计算机视觉中,f一般是奇数,甚至可能都是这样。你不多看到一个偶数的过滤器在计算机视觉里使用,我认为有两个缘由。

其中一个多是,若是是一个偶数,那么你只能使用一些不对称填充。只有f是奇数的状况下,Same卷积才会有天然的填充,咱们能够以一样的数量填充四周,而不是左边填充多一点,右边填充少一点,这样不对称的填充。

第二个缘由是当你有一个奇数维过滤器,好比3×3或者5×5的,它就有一个中心点。有时在计算机视觉里,若是有一个中心像素点会更方便,便于指出过滤器的位置。

也许这些都不是为何f一般是奇数的充分缘由,但若是你看了卷积的文献,你常常会看到3×3的过滤器,你也可能会看到一些5×5,7×7的过滤器。后面咱们也会谈到1×1的过滤器,以及何时它是有意义的。可是习惯上,我推荐你只使用奇数的过滤器。我想若是你使用偶数f也可能会获得不错的表现,若是遵循计算机视觉的惯例,我一般使用奇数值的f

你已经看到如何使用padding卷积,为了指定卷积操做中的padding,你能够指定的值。也可使用Valid卷积,也就是。也可以使用Same卷积填充像素,使你的输出和输入大小相同。以上就是padding,在接下来的视频中咱们讨论如何在卷积中设置步长。