卷积神经网络 CNN
卷积神经网络与普通的神经网络十分相似:他们都由神经元构成,这些神经元拥有可学习的权重和偏差。每一个神经元接收一些输入,执行点积运算并以非线性可选择地跟随它。整个网络仍然表征一个单个可微分的分数函数:从一端的单个图片像素到另一端的类别分数。他们在最后一个(全连接)层上仍然有一个损失函数(例如SVM或Softmax),并且我们为学习常规神经网络而设计的所有提示和技巧仍然适用。
那么什么改变了? CNN结构明确假设输入是图像,这允许我们将某些属性编码到架构中。这将使得前向函数更加有效地实现,并且大大减少网络中的参数数量。
1 架构简介
回顾:常规神经网络。正如我们前一个章节看到的,神经网络接收一个输入(一个矢量),并通过一系列的隐藏层将它进行转化。每一个隐藏层都由一组神经元构成,其中每一个神经元都与前一个层的神经元完全连接,而层内的神经元则完全独立,不共享任何的连接。最后的全连接层被称为“输出层”,并且在分类设置中它代表了类别分数。
常规神经网络不能很好地缩放到完整的图像。在CIFAR-10中,图片只有32*32*3大小(宽32,高32,3个颜色通道),所以在常规神经网络的第一个隐藏层中,一个全连接的神经元将会拥有32*32*3=3072个权重。这个数目看起来仍然能够管理,但显然这种全连接的结构不能够缩放到更大的图片。例如,一个200*200*3的图片,将会导致神经元拥有200*200*3=120,000个权重。此外,我们将会有许多个这样的神经元,所以参数数量会急剧上升!显然,这种完全的连接是浪费的,并且巨大的参数数量将会立刻导致过度拟合。
神经元的3D量。卷积神经网络利用了输入由图像组成的事实,并且其通过更有效的方式对架构进行了约束。特别地,不同于常规神经网络,CNN的层具有以三维排列的神经元:宽度,高度和深度。(注意,这里的深度指的是激活量的第三维,而不是指完整神经网络的深度,即网络中的层的总数。)例如,CIFAR-10中的输入图像是一个激活的输入量,并且该量尺寸是32*32*3(宽度,高度和深度)。我们马上就会知道,层中的神经元只会被连接到前一个层的一小块区域,而不是以完全连接的方式连接到所有的神经元。此外,对于CIFAR-10最后的输出层尺寸是1*1*10,因为在CNN结构的最后,我们将把整个图像缩减为一个类别分数的单一向量,该向量是沿着深度维度排列的。这里是一个图示:


左图:一个3层的神经网络。右图:一个神经元以三维排列的卷积神经网络(宽度,高度和深度),如其中一个层展示的那样。CNN的每一个层将3D的输入量转化成3D的输出量。在这个例子中,红色的输入层代表了图片,所以它的宽和高将会是图片的尺寸,并且深度将会是3(红色,绿色和蓝色通道)。
CNN是由许多层构成的。每个层都有一个简单的API:它利用一些可能具有参数的可微函数,将3D的输入量转化为3D的输出量。
2 CNN的层
如上所述,简单的CNN是一系列层,并且CNN的每一个层都通过一个可微函数将一个量转化为另一个量。我们用三个主要类型的层去构建CNN结构:卷积层(Convolutional Layer),池化层(Pooling Layer),全连接层(Fully-Connected Layer)。我们将会堆叠这些层去构建一个完整的CNN结构。
示例结构:简介。下面我们将会涉及到更多的细节,但是一个用于CIFAR-10分类的简单CNN将会有这样的结构:INPUT-CONV-RELU-POOL-FC,细节如下:
- INPUT[32*32*3]将保存图像的原始像素值,在这种情况下是一个宽度32,高度32,以及具有三个颜色通道R,G,B的图像。
- CONV层将计算连接到输入局部区域中的神经元的输出,每一个都计算它们的权重和它们在输入量中连接到的小区域之间的点积。如果我们决定使用12个滤波器,这可能会产生一个[32*32*12]的量。
- RELU层将应用一个元素激活函数,例如阈值是零点的max(0,x)。这将不改变量的尺寸[32*32*12]。
- POOL层将会沿着空间维度(宽度,高度)执行一个向下采样操作,从而产生诸如[16*16*2]的量。
- FC层将计算类别分数,产生一个[1*1*10]的量,其中10个数字中每个对应一个类别分数,例如CIFAR-10中的10个类别。顾名思义,和普通的神经网络一样,该层的每一个神经元都将连接到前一个量中的所有数字。
用这种方式,CNN就一层一层地将原始的图像,从原始的像素值转化成了类别分数。注意一些层包含参数而另一些不包含。特别的,CONV/FC层所执行的转化,不仅仅是激活的输入量的函数,也是参数的函数(神经元的权重和偏差)。而另一方面,RELU/POOL层会实现一个固定的函数。CONV/FC层中的参数将使用梯度下降进行训练,以使得对于每一个图像,CNN计算的类别分数和它在训练集中的标签保持一致。
总结:
- CNN结构在最简单的情况下是将图像量转化为输出量(例如,保存类别分数)的图层列表。
- 有几种不同类型的层(例如,CONV/FC/RELU/POOL是目前最受欢迎的层)
- 每一层都通过一个可微分的函数,接收一个3D的输入量,并将它转化成一个3D的输出量
- 有的层具有参数,有的层不具有参数(例如,CONV/FC具有,RELU/POOL不具有)
- 有的层具有附加的超参数,有的曾不具有(例如,CONV/FC/POOL具有,RELU不具有)
示例CNN结构的激活。最初的量存储了原始的图片像素(最左边)而最后的量存储了类别分数(最右边)。处理路径上每一个激活的量都展示为一列。因为可视化3D的量十分困难,我们列出了每个量的横向切片。最后一层的量保存着每个分类的分数,但是这里我们知可是火了前五名的分数,并把每个的标签标示出来。完整的网页演示。这里展示的结构是一个小型的VCG网络,我们稍后会继续讨论。
转载:https://blog.csdn.net/sinat_28728095/article/details/56284699
卷积神经网络 CNN的更多相关文章
- 卷积神经网络(CNN)前向传播算法
在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...
- 卷积神经网络(CNN)反向传播算法
在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结.在阅读本文前,建议先研究DNN的反向传播算法:深度 ...
- 卷积神经网络CNN总结
从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图 ...
- 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 深度学习之卷积神经网络(CNN)详解与代码实现(二)
用Tensorflow实现卷积神经网络(CNN) 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10737065. ...
- 深度学习之卷积神经网络(CNN)详解与代码实现(一)
卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 卷积神经网络(CNN)学习笔记1:基础入门
卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01 | In Machine Learning | 9 Comments | 14935 Vie ...
- 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 关于卷积神经网络CNN,网络和文献中 ...
- 深度学习之卷积神经网络CNN
转自:https://blog.csdn.net/cxmscb/article/details/71023576 一.CNN的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连 ...
随机推荐
- seo相关知识
网络营销菜鸟SEO入门必杀技(转载:http://blog.sina.com.cn/s/blog_5ef0fe8b0100n9cw.html) 搜索引擎优化(Search Engine Optimiz ...
- Visual Assist X 中使用doxygen的模板注释
http://blog.csdn.net/dhifnoju/article/details/44947213 Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C.C+ ...
- JS 清除DOM 中空白元素节点
HTML中的空白节点会影响整体的HTML的版面排榜 例如: 制作百度首页时,两个input之间的空白节点将本来是要整合在一起的搜索栏硬是把按钮和搜索框分离出现好丑的间隙 这时我们就可以用js清除这个空 ...
- 阿里规范学习总结-不要再foreach对元素进行add()/remove()操作,
在foreach循环中,对元素进行 remove()/add() 操作需要使用Iterator ,如果运行在多线程环境下,需要对Iterator对象枷锁. public class ForeachTe ...
- Jsの练习-数组常用方法 -forEach()
forEach() : 对数组进行遍历循环,对数组中的每一项运行给定函数. 格式: arr.forEach(function(value,index){}) <!DOCTYPE html> ...
- 微信退款回调AES算法(AES-256-ECB)
解密步骤如下: (1)对加密串A做base64解码,得到加密串B (2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)--> ...
- redis 脑裂等极端情况分析
脑裂真的是一个很头疼的问题(ps: 脑袋都裂开了,能不疼吗?),看下面的图: 一.哨兵(sentinel)模式下的脑裂 如上图,1个master与3个slave组成的哨兵模式(哨兵独立部署于其它机器) ...
- python爬虫基础_requests和bs4
这些都是笔记,还缺少详细整理,后续会更新. 下面这种方式,属于入门阶段,手动成分比较多. 首先安装必要组件: pip3 install requests pip3 install beautifuls ...
- tomcat文件下目录介绍
主目录下有bin ,conf ,lib ,logs ,temp ,webapps ,work 7个文件夹,下面对它们分别进行介绍: 1.bin目录主要是用来存放tomcat的命令,主要有两大类,一类是 ...
- 个人洛谷账号地址——https://www.luogu.org/space/show?uid=181909 附上NOIP查分系统
个人洛谷地址: https://www.luogu.org/space/show?uid=181909 NOPI查分地址: http://bytew.net/OIer/