关闭

[置顶] CNN卷积神经网络--反向传播(2,前向传播)

标签: deeplearning
2031人阅读 评论(0) 收藏 举报
分类:

看cnn,首先还是看看前向传播,在细谈反向求导。


    CNN的这三个特点是其对输入数据在空间(主要针对图像数据)上和时间(主要针对时间序列数据,参考TDNN)上的扭曲有很强的鲁棒性。CNN一般采用卷积层与采样层交替设置,即一层卷积层接一层采样层,采样层后接一层卷积...这样卷积层提取出特征,再进行组合形成更抽象的特征,最后形成对图片对象的描述特征,CNN后面还可以跟全连接层,全连接层跟BP一样。下面是一个卷积神经网络的示例

图1

  卷积神经网络的基本思想是这样,但具体实现有多重版本,我参考了matlab的Deep Learning的工具箱DeepLearnToolbox,这里实现的CNN与其他最大的差别是采样层没有权重和偏置,仅仅只对卷积层进行一个采样过程,这个工具箱的测试数据集是MINIST,每张图像是28*28大小,它实现的是下面这样一个CNN:

图2

INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC


前向传输计算

  前向计算时,输入层、卷积层、采样层、输出层的计算方式不相同。

  输入层:输入层没有输入值,只有一个输出向量,这个向量的大小就是图片的大小,即一个28*28矩阵;

 卷积层:卷积层的输入要么来源于输入层,要么来源于采样层,如上图红色部分。卷积层的每一个map都有一个大小相同的卷积核,Toolbox里面是5*5的卷积核。下面是一个示例,为了简单起见,卷积核大小为2*2,上一层的特征map大小为4*4,用这个卷积在图片上滚一遍,得到一个一个(4-2+1)*(4-2+1)=3*3的特征map,卷积核每次移动一步,因此。在Toolbox的实现中,卷积层的一个map与上层的所有map都关联,如上图的S2和C3,即C3共有6*12个卷积核,卷积层的每一个特征map是不同的卷积核在前一层所有map上作卷积并将对应元素累加后加一个偏置,再求sigmod得到的。还有需要注意的是,卷积层的map个数是在网络初始化指定的,而卷积层的map的大小是由卷积核和上一层输入map的大小决定的,假设上一层的map大小是n*n、卷积核的大小是k*k,则该层的map大小是(n-k+1)*(n-k+1),比如上图的24*24的map大小24=(28-5+1)。斯坦福的深度学习教程更加详细的介绍了卷积特征提取的计算过程。                                                                       

  图3

  采样层(subsampling,Pooling:采样层是对上一层map的一个采样处理,这里的采样方式是对上一层map的相邻小区域进行聚合统计,区域大小为scale*scale,有些实现是取小区域的最大值,而ToolBox里面的实现是采用2*2小区域的均值。注意,卷积的计算窗口是有重叠的,而采用的计算窗口没有重叠,ToolBox里面计算采样也是用卷积(conv2(A,K,'valid'))来实现的,卷积核是2*2,每个元素都是1/4,去掉计算得到的卷积结果中有重叠的部分,即:                                                                

    卷积神经网络大致组合经验公式INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC,在斯坦福cs231课程中,典型的一副图说明了次过程。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17255次
    • 积分:267
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:9篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论
  • Caffe学习:Layers

    nzzfsw: 请问楼主的caffe包是从哪里下载的?我的caffe里缺少vision_layers.hpp等文件啊...