当前位置: 首页 > news >正文

CNN Matlab例子RGB_CNN网络基础

    最近在看DQN的时候发现resnet模型又有点不太理解,于是把从CNN到Resnet的资料看了一遍,以防忘记,整个备忘录。

    卷积神经网络(CNN),是深度学习中常见的一种网络结构,相比于传统的神经网络大量的神经节点带来的内存消耗过大和参数爆炸,CNN的出现很好解决了这一问题。

一.CNN基本概念

    1.filter

    filter(过滤器),是用来在卷积过程中提取图像信息的基本单位。通过对过滤器中的参数设计,构建出不同种类的过滤器,可以提取图像中不同的信息。常见的有:vertical-filter,horizontal-filter,分别被用来提取垂直与水平特征。

    一般来讲,filter的尺寸是奇数,这样做主要有两个好处:

    (1)方便以filter中心进行卷积。

    (2)在padding的过程中,方便图像两边对称(见下)     

    2.padding

    在我们的卷积过程中,对于一个n*n的的image使用f*f的filter进行卷积,其得到的结果一般会变小:(n-f+1),为了使输入和输出的图像保持一致,对图像边界采用填充,即padding。在实际应用中,padding一般采取填0,除此之外还有镜像填充等填充方式。

    增加padding后,输出图像的计算公式变成了:n+2p-f+1,当输入图像大小和输出大小相同时,有2p=f-1,这也就是我们为什么filter取值为奇数的原因。

    padding的提出,主要解决了两个问题,即:

    (1)卷积过程中图像尺寸的减小

    (2)边缘信息的丢失

    3.stride

    stride(步长),即过滤器每次移动的长度,在实际用例中,一般默认为1。引入步长后,输出图像的计算公式变为:(n+2p-f)/s  +1。

二.卷积神经网络结构

    对于一个典型的CNN来说,其一般是由卷积层(Conv)、池化层(Pool),全连接层(Fc)堆叠构成的。对于池化层和卷积层,起主要的作用是用来提取图像的输入特征的,而全连接层更像一个分类器,根据前面池化层和卷积层得出的特征进行分类,三种网络交织,构成CNN。

    1.卷积层

    是由多种多样的filter通过扫描输入图像,来得到的。我们假设一个filter是3*3的,而他要处理的图像是5*5,设无padding并采取stride=1,得到的是一个3*3的输出图像,则输出图像的每个位置都进行如下运算:

b707604c88e2973963a77b3fcaa3356e.png

    卷积运算是过滤器与图片对应位置乘积的相加。此外,输入图像的通道数要与卷积核的通道数相匹配,最终的运算结果是通道的加和。以RGB图像为例,其输入通道有三,则过滤器为n*n*3。若有m个卷积核,则输出应为n*n*m。

    2.池化层

    池化层,其最主要的作用就是减小尺寸,提高运算速度,是为减少全连接层参数个数服务的。除此之外,池化层的使用也可以防止过拟合。

    池化层常用的方法有:max pooling和average pooling。

    对于max pooling,就是对应的filter所选区域保留最大值。

    对于average pooling,就是对应区域保留平均值。

62399ff6478460b1da93d520c93e9727.png

    3.全连接层

    对于全连接层中的每一层,都是由许多神经元组成的。假设对于一个具有1000个神经元的全连接层而言,其输入是一个3*3*5的,想要达成1000*1的输出,就要再做一次卷积,即将之前输出的变为一个确定的值,根据这个值的大小进行分类。

    把特征表示合起来当做一个值输出,就很好的消除了位置的影响。举个很简单的例子,对于一张出现在左上角猫的图片和一张出现在右下角的猫的图片,虽然是同一只猫,但是由于其位置不同,我们的网络很可能会把他们当作两个类来看待,而化成值,即我们只需要判断这个值是否在该类判别的区间就好,这就消除了空间造成的误差,增强鲁棒性。

    而当全连接层越多,神经元越多(一定程度上的多,不是越多越好,就会造成过拟合)。其对目标物体的分类就越精确。例如我们对于一个狗的识别,第一层全连接可能识别的是脸的一部分,比如鼻子,耳朵;而第二层全连接,就是把这些特征整合起来,比如整张脸作为一个分类,相当于一个逐步逼近实物的过程。

相关文章:

  • js date 当前日志往后一个月_因为造轮子,我一个月就转正了 | 原力计划
  • apache tomcat下32还是64_Tomcat 下载、安装、配置图文教程
  • sqlserver安装目录_Windows 2016中安装SQLServer2016 Failover Cluster
  • springmvc @requestbody_【面试系列7】Spring MVC
  • python实现程序安装_python实现查找所有程序的安装信息
  • python中os模块_python中的os模块
  • 怎么python画好几朵玫瑰花_怎么用python画玫瑰花,求大神贴代码,感激不尽
  • 51单片机电路原理图_10个定时器精选电路方案带你学习时钟脉冲的工作方式
  • python读取数据的函数详解_python如何从文件读取数据及解析
  • wxpython的安装步骤_wxPython的安装图文教程(Windows)
  • python findall函数_python re模块findall()函数实例解析
  • pip环境变量配置 python3.6_win10下Python3.6安装、配置以及pip安装教程
  • python卸载opencv_python怎么卸载opencv-问答-阿里云开发者社区-阿里云
  • python爬虫的意义_爬虫的意义与爬虫基本流程
  • python 安卓开发环境_Crazyflie笔记六: PC端 python 开发环境,安卓端开发环境搭建...
  • @jsonView过滤属性
  • 【笔记】你不知道的JS读书笔记——Promise
  • 3.7、@ResponseBody 和 @RestController
  • JavaScript对象详解
  • js学习笔记
  • Laravel 中的一个后期静态绑定
  • Linux gpio口使用方法
  • node.js
  • 从setTimeout-setInterval看JS线程
  • 工程优化暨babel升级小记
  • 驱动程序原理
  • 日剧·日综资源集合(建议收藏)
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 容器镜像
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ###项目技术发展史
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • ${factoryList }后面有空格不影响
  • (145)光线追踪距离场柔和阴影
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (3)nginx 配置(nginx.conf)
  • (AngularJS)Angular 控制器之间通信初探
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • ***检测工具之RKHunter AIDE
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net refrector
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • @Autowired注解的实现原理
  • @ModelAttribute 注解
  • [APUE]进程关系(下)
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)