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 深度学习笔记——CNN - 爱码网

1、为什么需要CNN(卷积神经网络)?

CNN其实是一种比FNN(全连接神经网络)要简单的网络结构,也就是说CNN的参数要比FNN少很多。那么,为什么需要这种网络结构呢?假如我们现在要识别一张图片中的一只飞鸟,FNN采用整体策略,把一整只鸟当做目标pattern去识别。CNN呢?CNN在一开始学习的时候就把鸟这个大的目标pattern分成很多小pattern,比如嘴、翅膀、脖子、爪子等,甚至更小的pattern,比如嘴的某个细节、爪子的某个可区分细节等,学习到这些小pattern之后,综合起来就构成了鸟这个大pattern。

另外,这只飞鸟可能存在于一张图片的任何位置,它有两只长得几乎相同的爪子,它的羽毛有很多也是相似的。这就是说,如果用FNN的话,我们可能会用大量的参数学习到很多冗余的pattern。CNN呢?CNN用最少的参数学习这只飞鸟的必要特征,而且空间无关,这也是CNN的价值之一。

还有,我们的目标是识别出这只鸟,只要它轮廓完整就好,所以并不在乎这只鸟的大小,鸟损失一部分细节也是可以接受的。因此,CNN在学习过程中可以进行采样操作而不影响识别效果,这使得模型进一步变得简单。没错,我们的目标就是用更简单的模型获得更高的识别率,这就是CNN的价值。总结一下:

  • 学习更小的pattern
  • 只学习必要的pattern
  • 采样操作使得网络模型进一步简化
2、CNN长啥样?
深度学习笔记——CNN
如上图所示,CNN由若干个卷积核(filter)和若干个卷积层、池化层以及最后的全连接层构成(由于最后的全连接层往往占据了整个CNN网络的参数量,在后来的CNN网络发展中逐渐被摒弃),整个学习过程就是不断用卷积核对输入进行反复的卷积、池化、卷积、池化,....,直到最后形成全连接层,目标pattern学习完毕。

黑白图片及其卷积核长这样:
深度学习笔记——CNN
卷积过程:
深度学习笔记——CNN
彩色图片及其卷积核:
深度学习笔记——CNN
3、彩色图片咋卷积?
      卷积核是三通道,则一个卷积核的卷积结果,也就是生成的特征图也是三通道。这就意味着,彩色图片的卷积操作是这样的:取卷积核的一个通道分别与彩色图片的三个通道进行卷积(与具体卷积计算与黑白图片相同),卷积结果相加,得到三通道特征图的其中一个,卷积核的剩余两个通道也执行类似操作,最终生成一个三通道的特征图。n个卷积核,就会生成n个三通道特征图。
4、为啥说CNN是FNN的简化版?
深度学习笔记——CNN
把一张二维的黑白图片拉直,变成一个列向量,把卷积得到的特征图做同样的操作,从上图可以看出:
(1)连接少了——使得权重减少;
(2)权重是共享的——使得权重更少!

5、补充
(1)若干个卷积核是几个?自己定。一个卷积核是一个pattern,代表一种特征表示。输入端的特征一般比较低级,因此在靠近输入端的卷积核个数一般设置的较少;而在输出端,特征更加抽象、更加丰富,因此卷积核应该设置的更多。
(2)一次卷积操作往往伴随着一次最大池化操作(或者平均池化),这样一组操作进行多少次决定了网络结构,具体次数自行设置。
(3)池化其实就是前面提到的采样,目的是为了减少参数简化模型(池化层不是必须的,用不用要看情况);卷积操作则是CNN的前两个价值的具体实现。

相关文章: