zoukankan      html  css  js  c++  java
  • deeplearning.ai 卷积神经网络 Week 1 卷积神经网络

    1. 传统的边缘检测(比如Sobel)手工设计了3*3的filter(或者叫kernel)的9个权重,在深度学习中,这9个权重都是学习出来的参数,会比手工设计的filter更好,不但可以提取90度、0度的边缘,也可以提取出任意朝向的边缘(比如73度)。把这9个权重当成参数的思想已经成为计算机视觉中最为有效的思想之一。

    2. Padding

      对于原始的卷积操作,原图分辨率为n*n,filter分辨率为f*f,则卷积后的结果是 (n-f+1)*(n-f+1)。有两个缺点:1)每次卷积操作都会把图像缩小;2)边缘像素的使用次数比中间像素少,这意味着丢掉了图像的很多边缘信息。为了解决这两个问题,可以在做卷积操作前,先填充(pad)原图。每边填充p个像素,则原图拓展成 (n+2p)*(n+2p) 的分辨率。

      p的选择分两种,1)Valid卷积:没有填充,p=0;2)Same卷积:输出和输入有相同的尺寸,p=(f+1)/2。计算机视觉里,f几乎永远是奇数。

    3. Stride(步长)

      步长为s,则输出的分辨率为 ((n+2p-f)/s+1)*((n+2p-f)/s+1)。如果(n+2p-f)/s不为整数,则向下取整到最近的整数(floor),这个物理意义是只有filter在输入图像内部或者填充后的图像区域才计算卷积,如果filter移动到外面,则不计算。

    4. Cross-correlation vs. convolution

      卷积的数学定义有flip的步骤,我们这边做的严格说叫corss-correlation(互相关)。但是在深度学习的文献中,按照惯例,我们还是称之为卷积,虽然我们并没有flip的操作。在数学、信号处理中,flip很重要是因为它有结合律的性质,(A*B)*C=A*(B*C)。但在图像处理里,这个性质不重要,所以省去了flip的操作。

    5. 多通道图像的卷积

      对于n*n*nc的多通道图像,filter是f*f*nc,得到 (n-f+1)*(n-f+1) 的图像。通道数必须一致。

      每个filter对应一个特征(比如垂直方向边缘),如果要得到多个特征,则要使用多个filter,每个filter都是f*f*nc,然后把每个filter的结果堆叠起来,这时的结果是 (n-f+1)*(n-f+1)*nc' ,这里nc'是filter的数量,也就是下一层网络的输入图像的通道数。

      这里所谓的“通道(channel)”在一些文献里也被称为“深度(depth)”,NG觉得通道更好,因为深度会和神经网络的深度混淆。

    6. 单层卷积网络

      对于第l层的卷机网络,f[l]是filter的大小(即第l层的filter大小为f*f),p[l]表示padding的像素数量,s[l]表示stride的大小,输入图像是nh[l-1]*nw[l-1]*nc[l-1],输出图像是nh[l]*nw[l]*nc[l],其中nh/w[l]=floor( (nh/w[l-1]+2p[l]-f[l])/s[l]+1 ),nc[l]是这一层的filter的数量,每个filter的大小是f[l]*f[l]*nc[l-1]。激活后的输出a[l]的大小是nh[l]*nw[l]*nc[l],如果有m个样本,向量化之后的激活输出A[l]的大小是m*nh[l]*nw[l]*nc[l]。权重的大小是f[l]*f[l]*nc[l-1]*nc[l]。bias的大小是nc[l],python里的size是 (1, 1, 1, nc[l])。图像的长宽和通道的排序并没有统一,这里NG是把通道放最后(即nh*nw*nc),有的代码是放最前面(即nc*nh*nw)。

      例子:如果有10个3*3*3的filter,这一层网络一共有(3*3*3+1)*10=280个参数。对于任意大小的图像,这层网络都只有280个参数,这有效控制住了参数的数量,防止过拟合。

    7. 池化层

      和卷积操作一样,也是用filter对原图进行操作,超参数是filter的大小f和步长s。一般 f=2,s=2,效果相当于高度和宽度各缩减一半。也有 f=3,s=2的情况。没有需要学习的参数。目的:缩减模型的大小,提高计算速度,提高所提取特征的鲁棒性。

      Max pooling:直观解释:只要filter的区域内提取到某个特征,它都会被保留在输出里。

      Average pooling:filter内取平均。

      Max pooling是最常用的。对于特别深的网络,也许会用average pooling来处理很多通道的数据(比如7*7*1000,整个空间内求平均值得到1*1*1000)。也可以根据自己的意愿做padding,则多一个超参数p,但padding的操作非常非常少用。一般池化层filter的通道数为1,对输入的每个通道单独处理,所以输入有几个通道,输出也是几个通道。

    8. 卷积神经网络

      前向传播中,随着层数越来越深,图像往往越来越小(开始阶段可能保持相同大小),通道数越来越多。

      卷积神经网络一般包含:卷积层(CONV)、池化层(POOL)、全连接层(FC)。池化层没有需要学习的参数,只有超参数。卷积层的参数相对少,大部分参数都在全连接层。

      一般一个或多个卷积层后会跟一个池化层,最后几个全连接层(最后一层也许是softmax)。有的书把卷积层、池化层合起来称做一层,有的书把卷积层、池化层分开来算。NG说我们在说深度学习网络有多少层时只考虑有权重的层,由于池化层没有,所以他就把卷积层、池化层合起来称做一层。

    9. 卷积层的优点

      相比于全连接层,卷积层的两个主要优势:1)参数共享(parameter sharing),某种特征提取器(比如垂直方向的边缘检测)在图像的某一部分适用,那么在其他部分也适用。2)稀疏连接(sparsity of connections),输出的每个元素只与一部分输入有关,从而预防过拟合。

  • 相关阅读:
    读jQuery之十六(事件代理)
    双向列表(JS)
    单向链表(JS)
    子程序(过程、函数、方法)
    jQuery(1.6.3) 中css方法对浮动的实现缺陷
    操作class属性的新APIclassList
    ajax后退解决方案(四)
    设置元素浮动的几种方式
    各浏览器中使用getAttribute获取checkbox/radio的checked值不同
    IE6/7不支持hashchange事件
  • 原文地址:https://www.cnblogs.com/zonghaochen/p/7895255.html
Copyright © 2011-2022 走看看