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

深度学习入门教学——卷积神经网络CNN

目录

一、CNN简介

一、输入层

二、卷积层

三、池化层

四、全连接层


一、CNN简介

1、应用领域

  • 检测任务
  • 分类与检索
  • 超分辨率重构

2、卷积网络与传统网咯的区别

  • 传统神经网络和卷积神经网络都是用来提取特征的。
  • 神经网络:
    • 可以将其看作是一个二维的。
  • 卷积神经网络:
    • 可以将其看作是一个三维的。

 3、整体框架

一、输入层

  • 该层主要是对原始图像数据进行预处理,保留了图片本身的结构。
  • 对于黑白的32×32的图片,CNN的输入是一个32*32的二维神经元;对于RGB格式的28×28 图片,CNN的输入则是一个32*32*3的三维神经元。
  • 三维包括宽度、高度和深度。
  • 深度可以看作是不同的颜色通道,例如:RGB,可拆分为R、G、B三个通道。

二、卷积层

1、卷积的任务

  • 卷积的任务,就是将图像分成若干区域,然后计算每个区域的特征值。
  • 例如:
    • 将图像分割为5*5*3个小块,每3*3*3个小块矩阵看作是一个区域,从每个区域中提取一个特征。(上图只演示了一个通道)
    • 区域的数据:,区域的权重参数矩阵:,特征图:

2、卷积特征值计算方法

2.1、图像颜色通道

  • 计算特征值的过程中,让每个通道都要做计算,然后将每个通道的结果加在一起。

2.2、特征值计算过程

  • ,每一个通道会有一个权重参数矩阵,方法是计算它们的内积,3个通道的计算结果之和加上偏移值(b0=1),即为最终特征值。
  • 【注】上图中的三个权重参数矩阵,统称为卷积核。
  • 例如:
  • 最终结果:
    • (0+2+0)+b=3(b为偏置值,已知为1)

3、特征图表示

  • 特征图可以不唯一,下图中就有两个特征图。
  • 主要原因是,卷积核可以不唯一(使用不同的方法进行特征提取),这样的话就会计算出多个特征图来,如下图。
  • 【注】有几个卷积核就有几个特征图;卷积核中权重参数矩阵的个数与输入的通道个数相同。
  • 计算特征图时,每个区域平移了两个单元格(可自行定义)即步长为2,如下图。

4、步长与卷积核大小对结果的影响

4.1、堆叠的卷积层

  • 由下图可知,在分类图像的过程中,做了很多次卷积。
  • 多次卷积并不是对一张图片从粗到细地多次计算特征,而是从所得到特征图的基础上去做卷积,如下图。

4.2、卷积层涉及参数

4.2.1、滑动窗口步长
  • 步长为1的卷积
  • 步长为2的卷积
  • 步长越小,得到的特征越丰富,但计算效率越慢。
4.2.2、卷积核尺寸
  • 卷积核尺寸即为卷积核中权重参数矩阵的维度。下图卷积核的尺寸即为3*3*3。
  • ,也可以4*4*3,卷积核尺寸越小,得到的特征越丰富。
4.2.3、边缘填充
  • 一张图片在划分区域计算特征时,有些点会被重复利用,即会影响多个结果。例如下图划红线的区域,就会影响特征图中的两个值。
  • 边缘的点只会影响一个值,而靠近中心的点可能会影响多个值,这对边缘来说是不公平的。例如下图画圈的点,影响了特征图中的四个值。
  • 原始输入中,即为下图5*5紫色矩阵。在其边界加上一圈全0的值,这样的话,原本的边界就不再是边界了,一定程度上弥补了边界信息缺失的问题。
  • ,添加0对最终结果不会产生影响。
4.2.4、卷积核个数
  • 卷积核个数决定了最终得到的特征图个数。
  • 每个卷积核的数值是不同的。

5、特征图尺寸计算与参数共享

5.1、卷积结果计算公式

  • 长度:
  • 宽度:
  • 其中W1、H1表示输入的宽度、长度;W2、H2表示输出特征图的宽度、长度;F表示卷积核长和宽的大小;S表示滑动窗口的步长;P表示边界填充(加几圈0)。
  • 例如:

5.2、卷积参数共享

  • 图片中的每个区域,都是使用同一卷积核进行计算,然后得到一个特征图,即为参数共享。
  • 这样可以大量节省参数,例如:

三、池化层

1、池化层的作用

  • 池化层的作用是对得到的特征图进行压缩。
  • 下图就是对特征图的长、宽进行了压缩,而不是减少特征图的个数。

2、最大池化

  • 池化过程中,是选择某个区域中最大的特征值(值越大,越重要),如下图。

四、全连接层

  • 全连接层的作用:将得到的所有特征图整合起来,便于分类处理。
  • 全连接层把所有二维特征图转换为一个二维向量。
http://www.lryc.cn/news/151486.html

相关文章:

  • 【MySQL】MySQL系统变量(system variables)列表(mysqld --verbose --help的结果例)
  • Python学习之四 数据输入与输出
  • VBA技术资料MF51:VBA_在Excel中突出显示唯一值
  • Mqtt学习笔记--交叉编译移植(1)
  • Gateway的服务网关
  • 信息化发展18
  • TypeScript学习 + 贪吃蛇项目
  • YOLO-NAS详细教程-介绍如何进行物体检测
  • 容器没有命令时,如何查看进程、容器executable file not found in $PATH: unknown
  • 如何使用 Amazon EMR 在 Amazon EKS 上构建可靠、高效、用户友好的 Spark 平台
  • 国产IDE如何获得捐赠和风险投资
  • 【数学建模】清风数模正课5 相关性分析
  • Java设计模式:一、六大设计原则-03:里氏替换原则
  • jmeter 固定定时器
  • 【微服务部署】07-调用链追踪
  • 【C++入门】命名空间、缺省参数、函数重载、引用、内联函数
  • c++ 学习之 构造函数的使用规则
  • C++操作符重载的注意事项
  • 10 | Spark 查找每个单词的最大行号
  • CRE66365
  • React hook 10种常见 Hook
  • 图文详解PhPStudy安装教程
  • stable diffusion实践操作-hypernetworks
  • Win10搭建VisualSvn Server
  • Golang网络编程
  • 详解vue3中ref和reactive用法和区别
  • QML与C++的交互操作
  • Java_理解方法调用
  • Mysql 性能分析(慢日志、profiling、explain)、读写分离(主从架构)、分库分表(垂直分库、垂直分表、水平分表)
  • 获取Linux内核源码