1. CNN卷积网络-初识

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

3. CNN卷积网络-反向更新

1. 前言

我们已经了解了CNN的结构,CNN主要结构有输入层,一些卷积层和池化层,后面是DNN全连接层,最后是Softmax激活函数的输出层。这里我们用一个彩色的汽车样本的图像识别再从感官上回顾下CNN的结构。图中的CONV即为卷积层,POOL即为池化层,而FC即为DNN全连接层,包括了我们上面最后的用Softmax激活函数的输出层。

2. 卷积层的前向传播

还是以上面的图片作为例子。

先考虑最简单的,样本都是二维的黑白图片。这样输入层\(X\)就是一个矩阵,矩阵的值等于图片的各个像素位置的值。这时和卷积层相连的卷积核\(W\)就也是矩阵。

如果样本都是有RGB的彩色图片,这样输入\(X\)就是3个矩阵,即分别对应\([R,G,B]\)的矩阵,或者说是一个张量。这时和卷积层相连的卷积核\(W\)就也是张量,对应的最后一维的维度为3.即每个卷积核都是3个子矩阵组成。

同样的方法,对于3D的彩色图片之类的样本,我们的输入\(X\)可以是4维,5维的张量,那么对应的卷积核W也是个高维的张量。

不管维度多高,对于我们的输入,前向传播的过程可以表示为:

\[
a^2= \sigma(z^2) = \sigma(a^1*W^2 +b^2)
\]
其中,上标代表层数,星号代表卷积,而\(b\)代表我们的偏倚, \(\sigma\)为激活函数,这里一般都是\(ReLU\)。

和DNN的前向传播比较一下,其实形式非常的像,只是我们这儿是张量的卷积,而不是矩阵的乘法。同时由于\(W\)是张量,那么同样的位置,\(W\)参数的个数就比DNN多很多了。

为了简化我们的描述,本文后面如果没有特殊说明,我们都默认输入是3维的张量,即用\(RBG\)可以表示的彩色图片。

这里需要我们自己定义的CNN模型参数是:

  1. 一般我们的卷积核不止一个,比如有\(K\)个,那么我们输入层的输出,或者说第二层卷积层的对应的输入就\(K\)个。
  2. 卷积核中每个子矩阵的的大小,一般我们都用子矩阵为方阵的卷积核,比如\([F,F]\)的子矩阵。
  3. 填充padding(以下简称P),我们卷积的时候,为了可以更好的识别边缘,一般都会在输入矩阵在周围加上若干圈的0再进行卷积,加多少圈则\(P\)为多少。
  4. 步幅stride(以下简称S),即在卷积过程中每次移动的像素距离大小。

3. 池化层的前向传播

池化层的处理逻辑是比较简单的,我们的目的就是对输入的矩阵进行缩小概括。比如输入的若干矩阵是\([N,N]\)维的,而我们的池化大小是\([k,k]\)的区域,则输出的矩阵都是\([N_k,N_k]\)维的。

这里需要需要我们定义的CNN模型参数是:

  1. 池化区域的大小\(k\)
  2. 池化的标准,一般是MAX或者Average。

4. 全连接层的前向传播

由于全连接层就是普通的DNN模型结构,因此我们可以直接使用DNN的前向传播算法逻辑,即:

\[
a^l = \sigma(z^l) = \sigma(W^la^{l-1} + b^l)
\]

5. 总结

有了上面的基础,我们现在总结下CNN的前向传播算法。

输入:1个图片样本,CNN模型的层数\(L\)和所有隐藏层的类型,对于卷积层,要定义卷积核的大小\(K\),卷积核子矩阵的维度\(F\),填充大小\(P\),步幅\(S\)。对于池化层,要定义池化区域大小k和池化标准(MAX或Average),对于全连接层,要定义全连接层的激活函数(输出层除外)和各层的神经元个数。

输出:CNN模型的输出\(a_L\)

  1. 根据输入层的填充大小\(P\),填充原始图片的边缘,得到输入张量\(a_1\)。
  2. 初始化所有隐藏层的参数\(W,b\)
  3. \(for\;\;l=2\;\;to\;\;L-1\):
    1. 如果第\(l\)层是卷积层,则输出为\(a^l= ReLU(z^l) = ReLU(a^{l-1}*W^l +b^l)\)
    2. 如果第\(l\)层是池化层,则输出为\(a_l=pool(a_{l-1})\), 这里的pool指按照池化区域大小\(k\)和池化标准将输入张量缩小的过程。
    3. 如果第\(l\)层是全连接层,则输出为\(a^l= \sigma(z^l) = \sigma(W^la^{l-1} +b^l)\)
  4. 对于输出层第\(L\)层:\(a^L= softmax(z^L) = softmax(W^La^{L-1} +b^L)\)

以上就是CNN前向传播算法的过程总结。有了CNN前向传播算法的基础,我们后面再来理解CNN的反向传播算法就简单多了。下一篇我们来讨论CNN的反向传播算法。

2. CNN卷积网络-前向传播算法的更多相关文章

  1. 3. CNN卷积网络-反向更新

    1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 1. 前言 如果读者详细的了解了DNN神经网络的反向更新,那对我们今天的学习会有很大的帮助.我们的CNN ...

  2. 1. CNN卷积网络-初识

    1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 1. 前言 卷积神经网络是一种特殊的深层的神经网络模型,它的特殊性体现在两个方面, 它的神经元间的连接是 ...

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

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

  4. 卷积神经网络 cnnff.m程序 中的前向传播算法 数据 分步解析

    最近在学习卷积神经网络,哎,真的是一头雾水!最后决定从阅读CNN程序下手! 程序来源于GitHub的DeepLearnToolbox 由于确实缺乏理论基础,所以,先从程序的数据流入手,虽然对高手来讲, ...

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

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

  6. Pytorch从0开始实现YOLO V3指南 part3——实现网络前向传播

    本节翻译自:https://blog.paperspace.com/how-to-implement-a-yolo-v3-object-detector-from-scratch-in-pytorch ...

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

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

  8. Deeplearning 两层cnn卷积网络详解

    https://blog.csdn.net/u013203733/article/details/79074452 转载地址: https://www.cnblogs.com/sunshineatno ...

  9. 深度学习——前向传播算法和反向传播算法(BP算法)及其推导

    1 BP算法的推导 图1 一个简单的三层神经网络 图1所示是一个简单的三层(两个隐藏层,一个输出层)神经网络结构,假设我们使用这个神经网络来解决二分类问题,我们给这个网络一个输入样本,通过前向运算得到 ...

随机推荐

  1. 使用Beetle简单构建聊天室程序

    之前已经讲解了Beetle简单地构建网络通讯程序,那程序紧紧是讲述了如何发送和接收数据:这一章将更深入的使用Beetle的功能,主要包括消息制定,协议分析包括消息接管处理等常用的功能.为了更好的描述所 ...

  2. 【Smali】Smali文件的动态调试

    1.简介 smalidea是一个IntelliJ IDEA/Android Studio smali语言插件,可实现动态调试smali代码.下载地址为:https://github.com/Jesus ...

  3. 【MySQL】MySQL支持的数据类型

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3 ...

  4. dbms_random.seed

    语法: DBMS_RANDOM.SEED ( val IN BINARY_INTEGER); DBMS_RANDOM.SEED ( val IN VARCHAR2); val: Seed number ...

  5. SQL触发器 常用语句

    一.创建一个简单的触发器 CREATE TRIGGER 触发器名称 ON 表名 FOR INSERT.UPDATE 或 DELETE AS     T-SQL 语句 注意:触发器名称是不加引号的.   ...

  6. JAVA中使用HTTP 1.1提高基于AXIS 1.4的web service的性能

    HTTP 1.1会在第一次连接的时候进行认证, 而在一定时间内保持连接而不用重新验证. 一般情形下,每个web service请求都会在web service服务端验证, 而验证会消耗很多时间, 因此 ...

  7. C#基础第九天-作业答案-储蓄账户(SavingAccount)和信用账户(CreditAccount)

    class Bank { //Dictionary<long,Account> dictionary=new Dictionary<long,Account>(); DataT ...

  8. Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

    1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...

  9. nginx 反向代理说明

    1 在大型项目开发中,可能会有多个应用部署在不同机器上,如果想让用户访问单个域名或IP访问到这些应用,可以使用 nginx 的反向代理,将应用的地址通过 nginx 代理,用户通过访问 nginx 地 ...

  10. 小程序踩过的一个小坑---解析二维码decodeURIComponent() url解码

    因为我们需要用户扫码进入小程序,每一个货柜都有一个对应的二维码,当然每个二维码里的信息也不一样.用户扫码进入小程序之后,二维码的信息会以参数q带进去,而我们只能在onLoad事件中拿到这个参数, 但是 ...