最近在学习卷积神经网络,哎,真的是一头雾水!最后决定从阅读CNN程序下手!

程序来源于GitHub的DeepLearnToolbox

由于确实缺乏理论基础,所以,先从程序的数据流入手,虽然对高手来讲,这样有点太小儿科了,但觉得对于个人理解CNN网络的结构和数据流走向有较大帮助!

下面,将要分析CNN的前向传播算法cnnff.m

本程序所用的神经网络的结构如下图的结构体net所示

结构体net

包含5层

每层的结构

这五层的结构如下:

每层的结构分别如下:

为了方便自己理解,下面,分别对每一层的输入、输出、传播分解介绍

只考虑某一批词的样本

注:所有样本集被分为numbatches批,每一批含有batchsize个样本,对于本程序而言,共有50个样本

 1 第一层到第五层的数据传递

2 第1层到第2层的前面传播(l=2):卷积操作

利用循环,分别计算第二层每个map的输出:net.layers{2}.a{j} (j=1,..,6)(这里的l=2)

下面,讨论第j次循环时,循环体内部的分步解析

(1初始化一个三维矩阵z

  • z的大小为24*24*50,即第二层中每个map的尺寸
  • z存放的是:第二层中每个map的输入

(2)计算第2层第j个map的输入

  • 即第1层的所有输出(i=1,…, inputmaps)对第2层的第j个输入的贡献的累加
  • z的计算方法是:

    利用第二层的第j个map的卷积核net.layers{2}.k{i}{j}分别对第一层中的第i个map进行卷积运算(i=1,…, net.layers{1}.outputmaps),并将得到的所有卷积结果相加

  • 第2层的inputmaps=1
  • 对net.layers{l}.k{i}{j}进行解释:

net.layers{l}.k:是一个元胞,有两层

net.layers{l}.k{i}:第l-1层的第i个map到第l层的所有maps的卷积核

net.layers{l}.k{i}{j}:第l-1层的第i个map到第l层的第j个map的卷积核

下面是一个例子:

第四层的卷积核元胞

第3层的第1个map到第4层的所有maps的卷积核(12)个

第3层的第1个map到第四层的第1个maps的卷积核

(3计算第2层的第j个map的输出

  • 第二层的第j个map的输出为net.layers{2}.a{j}=sigm(z+net.layers{l}.b{j})

    即第二层的第j个map的输入z+该map的偏执项后,求sigm函数

(4对第1层的map进行卷积操作的图例

3 第2层到第3层(l=3):降采样操作

下面,讨论第j次循环时,循环体内部的分步解析

(1)对第二层的第j个map进行卷积运算,得到z

  • 利用的卷积核(大小为scale*scale)如下:

(2)对z进行降采样,得到第三层的第j个map的输出

(3)如上所示的降采样过程示例如下图所示

4 第3层到第4层的前面传播(l=4):卷积操作

利用循环,分别计算第四层每个map的输出:net.layers{4}.a{j} (j=1,..,12)(这里的l=4)

下面,讨论第j次循环时,循环体内部的分步解析

(1初始化一个三维矩阵z

  • z的大小为24*24*50,即第二层中每个map的尺寸
  • z存放的是:第四层中每个map的输入

(2计算第4层的第j个map的输入

  • 即第3层的所有输出(i=1,…, inputmaps)对第4层的第j个输入的贡献的累加
  • z的计算方法是:

    利用第4层的第j个map的卷积核net.layers{4}.k{i}{j}分别对第3层中的第i个map进行卷积运算(i=1,…, net.layers{1}.outputmaps),并将得到的所有卷积结果相加

  • 第4层的inputmaps=12

(3计算第4层的第j个map的输出

  • 第4层的第j个map的输出为net.layers{4}.a{j}=sigm(z+net.layers{4}.b{j})

    即第4层的第j个map的输入z+该map的偏执项后,求sigm函数

(4对第3层的map进行卷积操作的图例

5 第4层到第5层 (l=5):降采样

下面,讨论第j次循环时,循环体内部的分步解析

(1)对第四层的第j个map进行卷积运算,得到z

  • 利用的卷积核(大小为scale*scale)如下:

(2)对z进行降采样,得到第五层的第j个map的输出

(3)如上所示的降采样过程示例如下图所示

6 将第五层的map输出向量化

(1)初始化net网络中的fv(其实是新加入fv,原来输入的net中没有fv)
(2)分别对第五层的每个输出map进行向量化(一共用numel(net.layers{n}.a个输出map)

(3)对于第五层的第j个输出map

  • 得到第五层第j个输出map的尺寸,应该是三维的,得到的三维尺寸向量存入sa中
  • 将第五层的第j个输出map的矩阵转化为一个sa(1)*sa(2),sa(3)大小的矩阵
  • 并将该得到的转化矩阵接入到第五层的第j-1个输出map之后
  • 关于矩阵fv的结构如上图所示
7 第五层向量化后传入普通神经网

第五层的向量化输出传入一个普通的神经网络,只有输入层和输出层,输入层含有192个神经元,输出层含有10个神经元,输入到输出层的权值矩阵存放在矩阵net.ffW中,在该权值矩阵作用下,该简单神经网络的输出即为最终的整个网络的输出,输出结果存放在net.o矩阵中,该矩阵大小为10*50,每一列分别表示每个输入样本得到的相应的输出

卷积神经网络 cnnff.m程序 中的前向传播算法 数据 分步解析的更多相关文章

  1. 深度神经网络(DNN)模型与前向传播算法

    深度神经网络(Deep Neural Networks, 以下简称DNN)是深度学习的基础,而要理解DNN,首先我们要理解DNN模型,下面我们就对DNN的模型与前向传播算法做一个总结. 1. 从感知机 ...

  2. 卷积神经网络(CNN)前向传播算法

    在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...

  3. 思考卷积神经网络(CNN)中各种意义

    原文:https://blog.csdn.net/aimreant/article/details/53145063 思考卷积神经网络(CNN)中各种意义 只是知道CNN是不够,我们需要对其进行解剖, ...

  4. 2. CNN卷积网络-前向传播算法

    1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 1. 前言 我们已经了解了CNN的结构,CNN主要结构有输入层,一些卷积层和池化层,后面是DNN全连接层 ...

  5. 在DevExpress程序中使用PopupContainerEdit和PopupContainer实现数据展示

    在一些数据的即时查询场景中,我们可能需要对输入信息进行模糊查询并进行选择,例如在一些文本输入场景,如输入某个站点编码或者设备编码,然后获取符合的列表供用户选择的场景,本篇随笔介绍在DevExpress ...

  6. 前向传播算法(Forward propagation)与反向传播算法(Back propagation)

    虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解.因此特意先对深度学习中的相关基础概念做一下总结.先看看前向传播算法(Forward propagation)与 ...

  7. ex3多类问题和NN中的前向传播

    ​ 昨日去了趟无锡,前天下了暴雨,所以昨天给我的感觉天气很好,天蓝云白的,以后在这边学习估计也是一件很爽的事情,且昨日通知书业寄到学校了,附赠了一份研究生数学建模的传单,我搜了搜近几年的题目,感觉统计 ...

  8. caffe中的前向传播和反向传播

    caffe中的网络结构是一层连着一层的,在相邻的两层中,可以认为前一层的输出就是后一层的输入,可以等效成如下的模型 可以认为输出top中的每个元素都是输出bottom中所有元素的函数.如果两个神经元之 ...

  9. 从Oracle数据库中查询前几个月数据时需要注意的一些问题

    在最近的一个项目中,有一个需求就是要查询数据库中前几个月的历史数据,但是由于自己考虑不全面造成了程序的bug,现在将这一块好好作一个总结,希望以后不再犯这种很低级的错误,首先贴出查询中用到的一个子函数 ...

随机推荐

  1. POJ 1185 状态压缩DP 炮兵阵地

    题目直达车:   POJ 1185 炮兵阵地 分析: 列( <=10 )的数据比较小, 一般会想到状压DP. Ⅰ.如果一行10全个‘P’,满足题意的状态不超过60种(可手动枚举). Ⅱ.用DFS ...

  2. 不一样的风格,C#的lambda表达式

    下面贴出代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  3. 网络学习笔记----02--IGMP组播、ARP

    IGMP组播 :在路由器的接口上运行,周期性扫描本网段是否有绑定某个多播地址的计算机. ARP,全称Address Resolution Protoco,将广播中的IP地址解析成MAC地址 查看MAC ...

  4. android之Java+html+javascript混合开发

    android开发,除了使用原生态的开发方式之外,还可以使用java+html+javascript混合开发的方式来开发,这样可以节省大量的开发时间,同时还可以使不同设备的用户获得相同的用户体验.好了 ...

  5. 用php切割大图片为成规则的小图

    将根据xml配置,将合并后的大图切割成一系列小图 <?php /** * 将大图片按照配置切割成一定比例的小图片 * 并按照一定规则给小图片命名 * * 使用方法: *根据guardians/g ...

  6. 在sql2008的实例 中 编写存储过程 读取 版本为sql2005 的实例 中的某个数据库里的数据

     --创建链接服务器 exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvl ...

  7. HDOJ-1754(简单线段树)

    最近开始重新学习线段树,先从最简单的开始吧! I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  8. order by跟group by 跟having----------------sum() 求和   avg()求平均   count() 求个数--------------like

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoEAAACdCAIAAABEujUmAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWX ...

  9. C#语法糖之第二篇: 参数默认值和命名参数 对象初始化器与集合初始化器

    今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完 ...

  10. [C# 基础知识系列]专题一:深入解析委托——C#中为什么要引入委托

    转自http://www.cnblogs.com/zhili/archive/2012/10/22/Delegate.html 引言: 对于一些刚接触C# 不久的朋友可能会对C#中一些基本特性理解的不 ...