卷积神经网络 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的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连 ...
随机推荐
- C# Winform 通过Socket实现客户端和服务端TCP通信
操作界面如下: 1.声明Socket 第一个参数:寻址方式,第二个参数:传输数据的方式,第三个参数:通信协议 Socket socket = new Socket(AddressFamily.Inte ...
- bluemix创建docker容器
简介: bluemix是基于kubernetes来服务的免费云空间.绑定信用卡后可以创建一个月的集群,一个月后会被删除. 下面示例介绍如何使用kubernetes dashboard来创建一个容器,并 ...
- sed 命令总结
sed是Stream Editor的缩写,是操作.过滤.转换文本内容的强大工具,对文件实现增删改查 主要参数 -n 取消默认输出 -i 修改保存文件 内置命令字符 a,append追加 d,delet ...
- [Leetcode 452] 最少需要射出多少支箭Minimum Number of Arrows to Burst Balloons 贪心 重载
[题目] There are a number of spherical balloons spread in two-dimensional space. For each balloon, pro ...
- 安装selenium,驱动geckodriver,及出现的问题
cmd输入安装selenium指令: pip install selenium 1.报错 Could not find a version that satisfies the requirement ...
- 在Eclipse中Tomcat配置图片保存路径
在上一篇二维码功能实现的时候发现,若将二维码保存在项目路径下,服务器起了之后存入的二维码图片是无法实时读取的,所以在Tomcat上配置图片保存位置,将图片保存到项目外的地方. 查找资料的时候看见一个方 ...
- Atom本地安装插件右上角出现红色报错解决方案
在github上搜索你相中的插件(Package),并下载ZIP包或直接克隆项目到本地.然后将该包直接复制到C盘中的用户下的 .atom\packages\ 文件夹下,注意 atom前面有一个点. 然 ...
- JSP学习(1)---JSP基本原理
一.JSP的本质 其本质是Servlet,web应用中的每个jsp页面都会由servlet容器生成对应的servlet. 在tomcat中,jsp生成的servlet在work文件夹下: 原jsp文件 ...
- python的列表生成式
列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, ...
- element-ui(或者说Vue的子组件)绑定的方法中传入自定义参数
比如el-upload中的 :on-success= fn,其实是给组件el-upload传递一个prop,这样写的话fn只能接受upload组件规定的参数,如果想自己传递父组件中的参数比如b,要写成 ...