array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】 - 爱码网

卷积神经网络(Convolutional Neural Networks)


一、计算机视觉(Computer Vision)

计算机视觉处理的输入都是图片。当图片尺寸比较小时,可以采用深度神经网络的结构来解决问题。但在现实中我们需要处理的图片尺寸通常比较大,如:500万像素、800万像素。这时输入数据将变得很大,使用神经网络结构将会有非常多的参数需要去学习,不仅很难训练,而且数据集不够大时很容易出现过拟合的问题。

例如:输入为1000x1000的RGB图片即3百万(million)个特征,设第一层隐藏层有1000个unit,这时第一层需要学习的参数有30亿个,明显不合理。而卷积神经网络就能很好的解决这一问题。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】


二、边缘检测(Edge Detection )

二维卷积:
知乎上有一篇关于 理解卷积 的文章,可以参考一下。

一个大矩阵–图像,一个小矩阵–滤波器(filter)/ 卷积核(kenel)。滤波器在图像上有规律的滑动,滤波器的每个元素与对于的图像区域的每个元素进行相乘然后相加,即得到图像上该区域中心坐标点的值,最终得到一个新的矩阵。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】
node:

  • filer的尺寸一般为奇数,方便得到中心点。一般选:1x1, 3x3, 5x5
  • 在数学上的卷积要把滤波器同时水平垂直旋转后再进行计算,图像卷积更准确的名称是互相关(cross-correlation),但是惯例上我们把它叫做卷积。

边缘检测
边缘检测就是利用边缘检测的滤波器与图像进行卷积,得到包含边缘信息的矩阵。下图是两种竖直边缘检测滤波器和的计算原理,第一种是明到暗计算结果为正数,第二种是暗到明计算结果为负数。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】
竖直边缘检测滤波器旋转90°可得到水平边缘检测滤波器。

多种竖直边缘检测滤波器:sobel,scharr
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】
这些滤波器的参数值都是人为设置的,不一定很好。而且如果想检测45°,30°的边缘参数值怎么设置呢?我们可以让神经网络来学习这些参数,其实这就是卷积神经网络最主要的思想。


三、填充(Padding)

Padding:
其实就是在原图像上向外填充像素,填充一层纵向和横向都增加两个像素。填充层数p,滤波器尺寸 fxf,图像尺寸 nxn。填充完图像的尺寸为 (n+2p)×(n+2p)。卷积运算后的尺寸为 (n+2p−f+1)×(n+2p−f+1) 。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】

Padding的作用:
因为每次卷积操作,图片的尺寸都会缩小,这样角落和边缘位置的像素进行卷积运算的次数少,可能会丢失有用信息。添加padding可以一定程度上减小这种缺点。

两种padding:Valid / Same
Valid:p=0,即没有padding。n×n的矩阵得到 (n−f+1)×(n−f+1) 的矩阵
Same:p=(f−1) / 2,即输入与输出矩阵的大小相同。卷积计算时,因为filter一般为奇数,所以p的值也为奇数。


四、跨步的卷积(Strided Convolutions)

步长(Stride): filter在图像上向右向下移动的步长,即一次移动几个像素。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】
计算公式:因为有可能会越界,所以要向下取整。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】

Valid 和 Same 输出尺寸的计算:
Valid:floor( (n-f) / s) + 1
Same:ceil (n / s)


五、立体/三维卷积(Convolutions Over Volume)

立体卷积: 滤波器的通道(channel)和图像的通道一致,然后进行立体的卷积。得到通道为1的结果矩阵。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】

多个立体滤波器
如果同时想检测多种特征,可以用多个立体滤波器进行卷积,然后把结果堆叠起来。所以结果矩阵的通道数为立体滤波器的个数,而与单个滤波器的尺寸无关。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】


六、单层卷积网络(One Layer of a Convolutional Network)

一层的卷积网络:
每个立体filter只有一个bias参数。前向传播时对每个卷积结果进行线性运算,然后进行非线性**。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】

本文使用的notations: 对于第l层
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】

多层的CNN例子
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】


七、池化层(Pooling Layers)

最大池化(Max pooling):
取每一个区域的最大值,只有超参数,没有参数。可以设置区域尺寸和步长。
以 f=2, p=2 为例:
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】

平均池化(Average pooling):
与最大池化层的区别在于,平均池化是取各区域的平均值。

池化层的超参数:

  • f:filter的大小;
  • s:stride大小;
  • 选择最大池化还是平均池化,通常用最大池化;
  • p:padding,正常不使用即p=0。

八、卷积神经网络例子

例子: Input >> Conv >> Pool >> Conv >> Pool >> FC >> FC >> FC >> softmax。FC(Fully Connected): 全连接层
通常我们把一个卷积层和一个池化层看作是一层。因为只有卷积层包含网络参数。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】

CNN各层的尺寸和参数:
搭建CNN时,每层的**值个数应该是均匀的下降,不能下降的太快或跳变。
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】
总结,在卷积层仅有少量的参数。在池化层没有参数。在全连接层存在大量的参数。


九、卷积神经网络的理解

卷积神经网络如何减少参数:

卷积神经网络为什么能有效的减小参数的个数,从而防止过拟合。

  • 参数共享:一个滤波器的参数,适用于图片中各个小区域。
  • 稀疏连接:只需要图像中一小部分元素来计算结果矩阵中的各个元素值,
    吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】
    CNN还有平移不变的特性:即使图片有轻微的平移,滤波器还是能较好的检测出特征。

搭建卷积神经网络

数据集 >> 网络结构 >> 成本函数 >> 梯度下降
吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】


相关文章: