卷积神经网络 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的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连 ...
随机推荐
- test--2
$(function () { if (isLogined && !c_has_follwed) { $.ajax({ url: "/mvc/Follow/Fol ...
- Trojan.Backdoor分析
总结:这是一个HTTP的后门,以安装(-in)||移除(-re)||配置(-c)为目的运行此程序时, 必须指定abcd为最后一个参数. 安装时他会把自身拷贝到%SYSTEMROOT%\WINDOWS\ ...
- 使用eclipse新建一个c项目
一.打开eclipse并新建项目 1.快捷键:字体放大:Ctrl+Shift+“+” 字体缩小:Ctrl+“-”
- 生成不同尺寸dimen的xml文件以及文件夹
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- Mysql数据字典导出
1.phpmyadmin中自带的数据字典导出 2.利用下面的脚本: <?php /** * 生成mysql数据字典 */ header("Content-type: text/html ...
- 成功使Linux服务端和Windows客户端建立socket通信
一.准备工作 1.一台装有虚拟机的Windows7操作系统,虚拟机中装的是CentOS6.5版本的Linux 2.Windows7已经装有java环境 二.编码 使用java编写socket通信的服务 ...
- sticky
最近有点忘了position几个取值的内容,在这里简单总结一下. position的含义是指定位类型,取值类型可以有:static.relative.absolute.fixed.inherit和st ...
- Type curtilage home
This year's National Day coincides with the Mid-Autumn festival, the double false merger about eight ...
- Nginx原理
原理机制 Nginx采用多进程(每个worker进程只对应一个线程)和I/O多路复用机制,实现并发的事件驱动处理: 多路复用即通过一种机制监视多个文件描述符,一旦文件描述符就绪(读写就绪),就可通知程 ...
- python并发_协程
在操作系统中进程是资源分配的最小单位, 线程是CPU调度的最小单位. 协程:是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明:协程是一种用户态的轻量级线程,即协程是由用户程序自 ...