1. CNN卷积网络-初识

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

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

1. 前言

卷积神经网络是一种特殊的深层的神经网络模型,它的特殊性体现在两个方面,

  1. 它的神经元间的连接是非全连接的,
  2. 同一层中某些神经元之间的连接的权重是共享的(即相同的)。

它的非全连接和权值共享的网络结构使之更类似于生物 神经网络,降低了网络模型的复杂度(对于很难学习的深层结构来说,这是非常重要的),减少了权值的数量。

2. CNN卷积网络结构

我们先重整体的角度观察一下CNN卷积网络的结构:

上图的结构从左到右是,输入层、卷积层(Convolution Layer)、池化层(Pooling layer)、卷积层、池化层、全连接层(Fully Connected Layer)、全链接层、输出层。

卷积层+池化层的组合可以在隐藏层出现很多次,上图中出现两次。而实际上这个次数是根据模型的需要而来的。当然我们也可以灵活使用使用卷积层+卷积层,或者卷积层+卷积层+池化层的组合,这些在构建模型的时候没有限制。但是最常见的CNN都是若干卷积层+池化层的组合,如上图中的CNN结构。

在若干卷积层+池化层后面是全连接层(Fully Connected Layer, 简称FC),全连接层其实就是我们前面讲的DNN结构,只是输出层使用了Softmax激活函数来做图像识别的分类,这点我们在DNN中也有讲述。

从上面CNN的模型描述可以看出,CNN相对于DNN,比较特殊的是卷积层和池化层,如果我们熟悉DNN,只要把卷积层和池化层的原理搞清楚了,那么搞清楚CNN就容易很多了。

3. 卷积层(Convolution Layer)

卷积层的实现是通过一个卷积核的方式实现的。一个卷积层对应一个卷积核,通过卷积核实现权值共享。

通过一张图我们就能了解卷积层的工作原理。

我们卷积层的输入是\([3,4]\)的矩阵,卷积核是\([2,2]\)的矩阵,输出是\([2,3]\)的矩阵。每一个输出的值都是通过输入层的\([2,2]\)的值和卷积核相乘的和。

再举一个动态的卷积过程的例子如下:

我们有下面这个绿色的\([5,5]\)输入矩阵,卷积核是黄色的\([3,3]\)的矩阵。卷积的步长是一个像素。则卷积的过程如下面的动图。卷积的结果是一个\([3,3]\)的矩阵。

通过这几个卷积层的例子想必大家对卷积核的计算方式有了一定的了解。

卷积层的公式如下:

\[
s(i,j)=(X*W)(i,j) + b = \sum\limits_{k=1}^{n\_in}(X_k*W_k)(i,j) +b
\]
其中,\(n\_in\)为输入矩阵的个数,或者是张量的最后一维的维数。\(X_k\)代表第\(k\)个输入矩阵。\(W_k\)代表卷积核的第\(k\)个子卷积核矩阵。\(s(i,j)\)即卷积核$W$3对应的输出矩阵的对应位置元素的值。

卷积层的输出经常加一个激活函数,使的整个网络具有非线性的结构。

4. 池化层(Pooling Layer)

如果说卷积层已经理解了,那么池化层就更好理解了。池化层的任务是选出最具代表性的特征,同时缩小数据的维度,使得后面的的网络处理起来更快,效率更高。池化层主要是通过一个过滤器去扫描输入的数据,从每次扫描的过程中生成输出数据。现在池化层主要生成数据的方式有2种

  1. 最大池化层(max pooling layer):max pooling是选择过滤器中最大的那个值。
  2. 平均池化层(average pooling layer):选择过滤器中所有值的平均值作为输出。

介绍了这么多,还不如来张图简明扼要。

5. 总结

在上面提到的卷积层和池化层还有两个概念没有提到。

  1. 步长(stride):stride的意思是过滤器的每次移动的步长,它直接影响最后输出的数据的维度。
  2. padding:padding的意思是给数据周围补0,使得周围的数据和中间的数据权重相同。

了解了stride和padding,我们就能计算出输出的维度:

输入:数据维度为\([W,W]\),Filter大小\([F,F]\),步长\(S\),padding的像素数\(P\),可以得出\([N,N]\)。

\[
N = \frac{W - F + 2P }{S} + 1
\]

1. CNN卷积网络-初识的更多相关文章

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

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

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

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

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

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

  4. 用keras作CNN卷积网络书本分类(书本、非书本)

    本文介绍如何使用keras作图片分类(2分类与多分类,其实就一个参数的区别...呵呵) 先来看看解决的问题:从一堆图片中分出是不是书本,也就是最终给图片标签上:“书本“.“非书本”,简单吧. 先来看看 ...

  5. 基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法

    基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法 Siamese CNN Temporally Constrained Metrics T ...

  6. CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题,Highway NetWork 则允许保留一定比例的原始输入 x。(这种思想在inception模型也有,例如卷积是concat并行,而不是串行)这样前面一层的信息,有一定比例可以不经过矩阵乘法和非线性变换,直接传输到下一层,仿佛一条信息高速公路,因此得名Highway Network

    from:https://blog.csdn.net/diamonjoy_zone/article/details/70904212 环境:Win8.1 TensorFlow1.0.1 软件:Anac ...

  7. 机器学习-计算机视觉和卷积网络CNN

    概述 对于计算机视觉的应用现在是非常广泛的,但是它背后的原理其实非常简单,就是将每一个像素的值pixel输入到一个DNN中,然后让这个神经网络去学习这个模型,最后去应用这个模型就可以了.听起来是不是很 ...

  8. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...

  9. PRML读书会第五章 Neural Networks(神经网络、BP误差后向传播链式求导法则、正则化、卷积网络)

    主讲人 网神 (新浪微博:@豆角茄子麻酱凉面) 网神(66707180) 18:55:06 那我们开始了啊,前面第3,4章讲了回归和分类问题,他们应用的主要限制是维度灾难问题.今天的第5章神经网络的内 ...

随机推荐

  1. TCP三次握手连接

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握 ...

  2. 【Spring】SpringMVC之详解AOP

    1,AOP简介 Aspect Oriented Programming  面向切面编程.AOP还是以OOP为基础,只不过将共同逻辑封装为组件,然后通过配置的方式将组件动态切入到原有组件中.这样做的有点 ...

  3. [MSP430] 对MSP430单片机__delay_cycles精确延时的说明及改正

    在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题. IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的 函数)以提供用户精确延时使用 ...

  4. dart --- 更符合程序员编程习惯的javascript替代者

    dart是google在2011年推出的一门语言,提供较为丰富的lib,并支持将代码转变为javascript,其demo code 和 demo app 也是以web前端代码来展示的. 其语言特性较 ...

  5. Bitter Sweet Symphony

    当我写下这段话时,另一个我觉醒了. 时间仿佛一下子从2013年的末尾跳到了2014年了,是那么的猝不及防.1990——2014,24岁了,一瞬间,不知不觉已经走过了24个岁月了.过去,我时常会反省着, ...

  6. systemctl 命令

    systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3 ...

  7. flock防止crontab脚本周期内未执行完重复执行(转)

    如果某脚本要运行30分钟,可以在Crontab里把脚本间隔设为至少一小时来避免冲突.而比较糟的情况是可能该脚本在执行周期内没有完成,接着第二个脚本又开始运行了.如何确保只有一个脚本实例运行呢?一个好用 ...

  8. JAVA日期查询:季度、月份、星期等时间信息

    package com.stt.dateChange; import java.text.SimpleDateFormat; import java.util.Calendar; import jav ...

  9. unity, Collider2D.bounds的一个坑

    Note that this will be an empty bounding box if the collider is disabled or the game object is inact ...

  10. hive元数据研究

    hive的元数据存放在关系型数据库中,元数据中存储了hive中所有表格的信息,包括表格的名字,表格的字段,字段的类型,注释.这些信息分散的存放在各个表中,给定一个hive中的表格名字,查询这个表中含有 ...