IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 神经网络中的卷积层 -> 正文阅读

[人工智能]神经网络中的卷积层

两个原则

全连接的线性变换由于前一层和后一层所有的神经元之间都有一对一的连接关系,也称为稠密连接层(Dense Layer)。在实际的应用过程中,这种神经元之间关系的描述可能有许多冗余,对于神经网络模型的训练并不是很友好。为此,人们发明了一系列稀疏(Spare)的连接方式来描述前后两层神经元之间的连接关系,其中最有名的一个就是卷积层(Convolution Layer),对应的神经网络称为卷积神经网络(Convolution Neural Networks,CNN)。
卷积常用于计算机视觉,在边缘检测、锐化等方面有应用,卷积层中一个最重要的东西为卷积核,也称为权重,它通常是一个行列数相等的矩阵,卷积核中的每个分量都是可训练的实数,它的作用就是将输入数据(比如灰度图片数据,形式就是一个矩阵)通过运算输出,具体步骤后面介绍。
先引入卷积的两个原则:1,平移不变性;2,局部性。
平移不变性:
当我们要观测一张图片中的某个事物时,不应该受到该事物在图片中的位置的影响,也就是说,当我们在对一张图片数据做卷积变换的时候,这个事物所属区域经过运算得到的输出并不会因为该区域的不同而不同,意思就是卷积核不变。
局部性:
一张图片中的某个事物只与该事物的所属局部区域相关,并不会扩展到整张图片。所以在进行卷积变换时,输入不需要是整张图片的数据,而是从图片中取出的一块区域。

具体计算步骤

在运算过程中,需要从输入图片中取出和卷积和大小相同的一块区域,然后把区域里面的数,和卷积核的权重按照以一对的方式相乘,并把所有的乘积求和作为最后的输出。通过变化区域位置(可以将这个区域看做一个窗口,可以左右上下平移,得到不同的数据)可以得到新的输出,这个过程即为卷积的过程。
假如有一张灰度图,表示成矩阵的形式作为总的输入数据(input),大小为3x3。由平移不变性,我们先定义一个卷积核(Kernel),大小为2x2(后面卷积核可以通过训练得到)。在由局部性,我们从该图片数据中依次选取2x2大小的区域。卷积层的输入输出由下图所示:
在这里插入图片描述
对应的运算为:
在这里插入图片描述
一般化,我们将输入X定义为 n w × n h n_w\times{n_h} nw?×nh?大小的矩阵,卷积核为 k w × k h k_w\times{k_h} kw?×kh?大小的矩阵,通过以上的运算定义,不难发现,输出Y的形状由输入X的形状和卷积核的形状所决定,有以下关系:
Y w = n w ? k w + 1 ; Y h = n h ? k h + 1 Y_w=n_w-k_w+1;Y_h=n_h-k_h+1 Yw?=nw??kw?+1;Yh?=nh??kh?+1
其中 Y w 、 Y h Y_w、Y_h Yw?Yh?分别表示输出宽度与高度。上面式子得出是由于每次运算的数据形状必须和卷积核相同,而且要保证区域整体在整个数据内。
上述运算可写作:
Y = X ? W + b Y = X*W+b Y=X?W+b
这里的 ? * ?为矩阵的点乘,b为大小与输出一样的偏置项(bias),W与b都是可学习的参数。

填充与步幅

卷积层中有几个超参数需要确定,分别为卷积核的大小、填充、步幅。
填充:
前面可以发现,输入图像与卷积核进行卷积后的结果中损失了部分值,输入图像的边缘被“修剪”掉了(边缘处只检测了部分像素点,丢失了图片边界处的众多信息)。
所以,需要在原数据上多添加行和列,使裁剪时能包含全原数据的信息。至少需要填充 K h ? 1 K_h-1 Kh??1行, K w ? 1 K_w-1 Kw??1列才能在卷积时取到全部。根据输出的形状公式算出此时输出的形状为 ( n h , n w ) (n_h,n_w) (nh?,nw?)
步幅:
步幅的设置主要是为了计算量的减小。
因为当给定输入为224x224的矩阵时,在使用5x5卷积核的情况下,如果使用步幅为1(每次的裁剪区域按一个单位移动),需要55层卷积层才能将输出降低为4x4,耗费计算资源大。
为了解决这一问题,可以设置大一点的步幅,如下图:
在这里插入图片描述

多输入输出通道

多输入单输出通道
通常我们输入的是一张彩色图,而不是一张灰度图,所以一般会有3个channel,这时的卷积核的维度需要提高,从( k w k_w kw?, k h k_h kh?)变为( c i c_i ci?, k w k_w kw?, k h k_h kh?),这里的 c i c_i ci?为输入的channel数,将输入的每一个channel对应一个不同的卷积核,做上述灰度图的运算,再将每一个channel的输出相加得到最后的输出。
多输入单输出通道
多输入多输出通道
有时候的输出需要多个channel,所以在多输入单输出的维度上再改变卷积核,这时候需要将卷积核的维度再次提高,从多输入单输出的( c i c_i ci?, k w k_w kw?, k h k_h kh?)变为( c 0 c_0 c0?, c i c_i ci?, k w k_w kw?, k h k_h kh?),这里 c 0 c_0 c0?指的是要求输出的channel数,比如3个channel的输入要转换为2个channel的输出,这里的 c 0 c_0 c0?就为2, c i c_i ci?就为3。在每一个 c 0 c_0 c0?的维度上做多输入单输出的运算,得到 c 0 c_0 c0?个channel的输出。
多输入多输出通道



参考资料:李沐—动手学深度学习v2

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:33:55  更:2021-10-30 12:33:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 6:31:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码