20201227一周学习总结(CNN)
CNN的整体流程
输入层——》卷积层——》池化层(可以接多个卷积和池化,由我们自己设定)—(flatten)—》全连接网络——》输出层
处理图像问题时为什么用CNN而不用DNN?
当我们直接用一般的fully connected的feedforward network来做图像处理的时候,往往会需要太多的参数,CNN做的事情其实是,来简化这个neural network的架构,我们根据自己的知识和对图像处理的理解,一开始就把某些实际上用不到的参数给过滤掉。
数据输入层
该层要做的处理主要是对原始图像数据进行预处理,其中包括:
• 去均值:把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
• 归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
• PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化
去均值与归一化效果图:
去相关与白化效果图:
还可以对输入图像先进行一个下采样,减少输入的像素数量。
CNN对不同scale的相同pattern的处理上存在一定的困难,由于现在每一个filter size都是一样的,这意味着,如果你今天有同一个pattern,它有不同的size,有大的鸟嘴,也有小的鸟嘴,CNN并不能够自动处理这个问题;DeepMind曾经发过一篇paper,上面提到了当你input一张image的时候,它在CNN前面,再接另外一个network,这个network做的事情是,它会output一些scalar,告诉你说,它要把这个image的里面的哪些位置做旋转、缩放,然后,再丢到CNN里面,这样你其实会得到比较好的performance。
卷积层
以灰度图像为例进行讲解:从一个小小的权重矩阵,也就是卷积核(kernel)开始,让它逐步在二维输入数据上“扫描”。卷积核“滑动”的同时,计算权重矩阵和扫描所得的数据矩阵的乘积,然后把结果汇总成一个输出像素。
填充
填充值是什么呢?以下图为例子,比如有这么一个5x5的图片(一个格子一个像素),我们卷积核取2x2,步长取2,那么我们发现还剩下1个像素没法滑完,那怎么办呢?
那我们在原先的矩阵加了一层填充值,使得变成6x6的矩阵,那么窗口就可以刚好把所有像素遍历完。这就是填充值的作用。
通常都用“0”来进行填充的。
卷积核
【卷积核的大小一般为奇数乘奇数】 1x1,3x3,5x5,7x7都是最常见的。这是为什么呢?为什么没有偶数x偶数?
(1)更容易padding
在卷积时,我们有时候需要卷积前后的尺寸不变。这时候我们就需要用到padding。假设图像的大小,也就是被卷积对象的大小为n*n,卷积核大小为kxk,padding的幅度设为(k-1)/2时,卷积后的输出就为(n-k+2x((k-1)/2))/1+1=n,即卷积输出为nxn,保证了卷积前后尺寸不变。但是如果k是偶数的话,(k-1)/2就不是整数了。
(2)更容易找到卷积锚点
在CNN中,进行卷积操作时一般会以卷积核模块的一个位置为基准进行滑动,这个基准通常就是卷积核模块的中心。若卷积核为奇数,卷积锚点很好找,自然就是卷积模块中心,但如果卷积核是偶数,这时候就没有办法确定了,让谁是锚点似乎都不怎么好。
多通道卷积
这里就要涉及到“卷积核”和“filter”这两个术语的区别。在只有一个通道的情况下,“卷积核”就相当于“filter”,这两个概念是可以互换的。但在一般情况下,它们是两个完全不同的概念。每个“filter”实际上恰好是“卷积核”的一个集合,在当前层,每个通道都对应一个卷积核,且这个卷积核是独一无二的。
多通道卷积的计算过程:将矩阵与滤波器对应的每一个通道进行卷积运算,最后相加,形成一个单通道输出,加上偏置项后,我们得到了一个最终的单通道输出。如果存在多个filter,这时我们可以把这些最终的单通道输出组合成一个总输出。
这里我们还需要注意一些问题——滤波器的通道数、输出特征图的通道数。
某一层滤波器的通道数 = 上一层特征图的通道数。如上图所示,我们输入一张 6x6x3 的RGB图片,那么滤波器(3x3x3 )也要有三个通道。
某一层输出特征图的通道数 = 当前层滤波器的个数。如上图所示,当只有一个filter时,输出特征图( 4x4)的通道数为1;当有2个filter时,输出特征图(4x4x2)的通道数为2。
卷积和全连接的关系
卷积可以看成是全连接的局部连接和权值共享。
池化层
池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
作用:
特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。
在一定程度上防止过拟合,更方便优化。
池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。
Maxpooling的问题
如果取Maxpooling放到network里面,不就没法微分了吗?这个东西,感觉是没有办法对它微分的啊,其实是可以的:
maxpooling和maxout类似,以maxout举例:
实际上我们真正训练的并不是一个含有max函数的network,而是一个化简后如下图所示的linear network;当我们还没有真正开始训练模型的时候,此时这个network含有max函数无法微分,但是只要真的丢进去了一笔data,network就会马上根据这笔data确定具体的形状,此时max函数的问题已经被实际数据给解决了,所以我们完全可以根据这笔training data使用Backpropagation的方法去训练被network留下来的参数
所以我们担心的max函数无法微分,它只是理论上的问题;在具体的实践上,我们完全可以先根据data把max函数转化为某个具体的函数,再对这个转化后的thiner linear network进行微分
Flatten
做完convolution和max pooling之后,就是FLatten和Fully connected Feedforward network的部分
Flatten的意思是,把左边的feature map拉直,然后把它丢进一个Fully connected Feedforward network,然后就结束了,也就是说,我们之前通过CNN提取出了image的feature,它相较于原先一整个image的vetor,少了很大一部分内容,因此需要的参数也大幅度地减少了,但最终,也还是要丢到一个Fully connected的network中去做最后的分类工作。
20201227一周学习总结(CNN)相关推荐
- OUC暑期培训(深度学习)——第六周学习记录:Vision Transformer amp; Swin Transformer
第六周学习:Vision Transformer & Swin Transformer Part 1 视频学习及论文阅读 1.Vision Transformer 原文链接:https://a ...
- OUC暑期培训(深度学习)——第五周学习记录:ShuffleNet EfficientNet 迁移学习
第五周学习:ShuffleNet & EfficientNet & 迁移学习 Part 1 视频学习 1.ShuffleNet V1 ShuffleNet和MobileNet一样想,应 ...
- 第十五周学习周报(20180611-20180617)
第十五周学习周报 一.本周学习情况 1.本周主要学习李宏毅老师的机器学习课程 Backpropagation Convolutional Neural Network Semi-supervised ...
- 《Java程序设计》第十一周学习总结
20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...
- 20175320 2018-2019-2 《Java程序设计》第2周学习总结
20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...
- 2018-2019-1 20165214 《信息安全系统设计基础》第六周学习总结
20165214 2018-2019-1 <信息安全系统设计基础>第六周学习总结 教材学习内容总结 1.输入操作是从I/O设备复制数据到主存,而输出操作是从主存复制数据到I/O设备 2.U ...
- 2017-2018-1 20155204 《信息安全系统设计基础》第十一周学习总结
2017-2018-1 20155204 <信息安全系统设计基础>第十一周学习总结 教材学习内容总结 9.1物理和虚拟地址 物理地址:计算机系统的主存被组织成一个人由M个连续的字节到校的单 ...
- 2017-2018-1 20155202 《信息安全系统设计基础》第9周学习总结
2017-2018-1 20155202 <信息安全系统设计基础>第9周学习总结 第6章 存储器层次结构 教材学习内容总结 随机访问存储器(Random-AccessMem)分为两类:静态 ...
- 20162303 2016-2017-2 《程序设计与数据结构》第六周学习总结
20162303 2016-2017-2 <程序设计与数据结构>第六周学习总结 教材学习内容总结 通过继承来创建类,比从零开始编写代码来的更快.更容易也更经济. 继承在父类与子类之间建立了 ...
最新文章
- serv-u 自定义html,Serv-U架设教程_Serv-U使用教程图文版
- eclipse Indigo Helios Galileo几种版本的意思
- 单面煎鸡蛋,健康有风险
- VTK:绘制BorderPixelSize边框像素大小用法实战
- mysql主从配置常见问题_mysql 主从复制配置,以及常见问题解决!
- 重磅官宣!统一操作系统UOS正式版发布
- filter grok 判断_logstash grok使用案例
- 去除XP桌面图标的阴影
- Windows上使用VLC插件的方式在IE浏览器上播放RTSP视频流
- 微信云函数的使用步骤
- 9个Excel小技巧,提高你的数据分析效率
- 降采样,过采样,欠采样,子采样,下采样
- leetcode动态规划之零钱兑换问题
- 多模态神经成像之EEG-fMRI同步
- tiny4412 裸机程序 七、重定位代码到DRAM【转】
- 【附带全球各国边界等数据分享】ArcGIS如何制作一张世界地图
- 电子信息工程专业,大学要学什么
- 关于APP上语音播报的完整实现(iOS篇)
- 为什么是张一鸣?为什么是抖音?
- CAD如何快速转换为PDF