1. CNN卷积网络-初识
1. CNN卷积网络-初识
2. CNN卷积网络-前向传播算法
3. CNN卷积网络-反向更新
1. 前言
卷积神经网络是一种特殊的深层的神经网络模型,它的特殊性体现在两个方面,
- 它的神经元间的连接是非全连接的,
- 同一层中某些神经元之间的连接的权重是共享的(即相同的)。
它的非全连接和权值共享的网络结构使之更类似于生物 神经网络,降低了网络模型的复杂度(对于很难学习的深层结构来说,这是非常重要的),减少了权值的数量。
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种
- 最大池化层(max pooling layer):max pooling是选择过滤器中最大的那个值。
- 平均池化层(average pooling layer):选择过滤器中所有值的平均值作为输出。
介绍了这么多,还不如来张图简明扼要。
5. 总结
在上面提到的卷积层和池化层还有两个概念没有提到。
- 步长(stride):stride的意思是过滤器的每次移动的步长,它直接影响最后输出的数据的维度。
- padding:padding的意思是给数据周围补0,使得周围的数据和中间的数据权重相同。
了解了stride和padding,我们就能计算出输出的维度:
输入:数据维度为\([W,W]\),Filter大小\([F,F]\),步长\(S\),padding的像素数\(P\),可以得出\([N,N]\)。
\[
N = \frac{W - F + 2P }{S} + 1
\]
1. CNN卷积网络-初识的更多相关文章
- 3. CNN卷积网络-反向更新
1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 1. 前言 如果读者详细的了解了DNN神经网络的反向更新,那对我们今天的学习会有很大的帮助.我们的CNN ...
- 2. CNN卷积网络-前向传播算法
1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 1. 前言 我们已经了解了CNN的结构,CNN主要结构有输入层,一些卷积层和池化层,后面是DNN全连接层 ...
- Deeplearning 两层cnn卷积网络详解
https://blog.csdn.net/u013203733/article/details/79074452 转载地址: https://www.cnblogs.com/sunshineatno ...
- 用keras作CNN卷积网络书本分类(书本、非书本)
本文介绍如何使用keras作图片分类(2分类与多分类,其实就一个参数的区别...呵呵) 先来看看解决的问题:从一堆图片中分出是不是书本,也就是最终给图片标签上:“书本“.“非书本”,简单吧. 先来看看 ...
- 基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法
基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法 Siamese CNN Temporally Constrained Metrics T ...
- 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 ...
- 机器学习-计算机视觉和卷积网络CNN
概述 对于计算机视觉的应用现在是非常广泛的,但是它背后的原理其实非常简单,就是将每一个像素的值pixel输入到一个DNN中,然后让这个神经网络去学习这个模型,最后去应用这个模型就可以了.听起来是不是很 ...
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- PRML读书会第五章 Neural Networks(神经网络、BP误差后向传播链式求导法则、正则化、卷积网络)
主讲人 网神 (新浪微博:@豆角茄子麻酱凉面) 网神(66707180) 18:55:06 那我们开始了啊,前面第3,4章讲了回归和分类问题,他们应用的主要限制是维度灾难问题.今天的第5章神经网络的内 ...
随机推荐
- [Android实例] Android之断点续传下载
在我们做开发的时候经常遇到的就是下载了,现在下载的方法有很多很多,那么怎么做到断点续传下载呢!很多人都头疼这个问题,如果我们没有很好的逻辑真不是很容易解决啊.我参考了一下前辈们的资料了整理了一个项目, ...
- 【Oracle】详解Oracle中的序列
序列: 是oacle提供的用于产生一系列唯一数字的数据库对象. 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 创建序列: 1. 要有创建序列的权限 create ...
- 安装Nginx+Tomcat
Centos下安装nginx rpm包 1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/packages/centos/ http://nginx.org/e ...
- 你的应用是怎样被替换的,App劫持病毒剖析
一.App劫持病毒介绍 App劫持是指运行流程被重定向,又可分为Activity劫持.安装劫持.流量劫持.函数运行劫持等. 本文将对最近利用Acticity劫持和安装劫持的病毒进行分析. 二.Acti ...
- Python3 命令行参数
Python 提供了 getopt 模块来获取命令行参数. $ python test.py arg1 arg2 arg3 Python 中也可以所用 sys 的 sys.argv 来获取命令行参数: ...
- FreeSWITCH网关参数之caller-id-in-from
1. 这个配置项两个设置值: true和false(默认) <param name="caller-id-in-from" value="true"/&g ...
- Android RoboGuice开源框架、Butter Knife开源框架浅析
Google Guice on Android(RoboGuice) 今天介绍一下Google的这个开源框架RoboGuice, 它的作用跟之前讲过的Dagger框架差点儿是一样的,仅仅是Dagger ...
- 关于 f 散度
在概率统计中,f散度是一个函数,这个函数用来衡量两个概率密度p和q的区别,也就是衡量这两个分布多么的相同或者不同. 1.f散度的定义p和q是同一个空间中的两个概率密度函数,它们之间的f散度可以用如下方 ...
- 为什么推荐你用 Kotlin语言?
谷歌大牛说:为什么 Kotlin 比你们用的那些垃圾语言都好 原标题:谷歌大牛说:为什么 Kotlin 比你们用的那些垃圾语言都好 编译:伯乐在线/黄小非 [伯乐在线/程序员的那些事 导读]:5月18 ...
- Batch to setup JAVA programming environment for Algorithm class from priston
Original web site: http://algs4.cs.princeton.edu/linux/ Part. I [username:~/] [username:~/] mkdir al ...