| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 第七章 卷积神经网络——整体结构&卷积层&池化层&卷积层和池化层的实现&CNN的实现 -> 正文阅读 |
|
[人工智能]第七章 卷积神经网络——整体结构&卷积层&池化层&卷积层和池化层的实现&CNN的实现 |
1.整体结构*卷积神经网络(CNN)被用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以CNN为基础 *基于全链接层(Affine层)的网络的例子: ?*基于CNN的网络例子: CNN中新增了Convolution层和Pooling层,CNN的层连接顺序是Convolution-ReLU-(Pooling)(Pooling层有时会被省略),在上图中,靠近输出层中使用了之前的Affine-ReLU组合,最后的输出层使用了之前的Affine-Softmax组合 2.卷积层*卷积层可以保持形状不变,当输入数据是图像时,卷积层会以三维数据的形式接收输入数据,并同样以三维数据的形式输出至下一层,因此在CNN中,可以(有可能)正确理解图像等具有形状的数据。 *CNN中,有时将卷积层的输入输出数据称为特征图,其中输入数据称为输入特征图,输出数据称为输出特征图 *卷积运算: ?? 卷积层进行的处理就是卷积运算,卷积运算相当于图像处理中的滤波器运算 ?? 卷积运算举例: 用表示卷积运算,在本例中,输入大小是(4,4),滤波器大小是(3,3),输出大小是(2,2) ?? 有些文献中用“核”来表示“滤波器” ?? 运算过程: 将各个位置上滤波器的元素和输入的对应元素相乘,然后再求和,再将这个结果保存到对应的位置,将这个过程在所有位置都进行一遍,就可以得到卷积运算的输出 ?? CNN中,滤波器的参数就对应之前的权重,并且CNN中也存在偏置 *填充: ?? 在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比如0等),这称为填充,是卷积运算中经常会用到的处理,例如对(4,4)的输入数据应用了幅度为1的填充: 使用填充主要是为了调整输出大小 *步幅: ?? 应用滤波器的位置间隔称为步幅,增大步幅后,输出大小会变小,而增大填充后,输出大小会变大。设输入大小为(H,W),滤波器大小为(FH,FW),输出大小为(OH,OW),填充为P,步幅为S,则: 上式分别可以除尽,当输出大小无法除尽时,需要采取报错措施,有时向最近的整数四舍五入 *三维卷积数据的运算 *批处理: 3.池化层*池化层是缩小高、长方向上的空间的运算,例如: 上图是按步幅2进行2*2的Max池化时的处理顺序,Max池化是获取最大值的运算,一般来说,池化的窗口大小会和步幅设定成相同的值 *除了Max池化之外,还有Average池化等,相对于Max池化是从目标区域中取出最大值,Average池化则是计算目标区域的平均值,在图像识别领域,主要使用Max池化 *池化层的特征: ?? 没有要学习的参数;通道数不发生变化;对微笑的位置变化具有鲁棒性 4.卷积层和池化层的实现*CNN中各个层间传递的数据是4维数据,所谓4维数据,比如数据的形状是(10,1,28,28),则它对应10个高为28、长为28、通道为1的数据,用Python实现为: x=np.random.rand(10,1,28,28)#随机生成数据 ?? 如果要访问第一个数据的第一个通道的空间数据,则可以写成: ?? X[0,0] *im2col:im2col是一个函数,将输入数据展开以适合滤波器,对三维的输入数据应用im2col后,数据转换为2维矩阵(把包含批数量的4维数据转换成了2维数据),将应用滤波器的区域横向展开为1列,im2col会在所有应用滤波器的地方进行这个展开处理 ?在上图中,为了便于观察,将步幅设置的很大,以使滤波器的应用区域不重叠,而在实际的卷积运算中,滤波器的应用区域几乎都是重叠的,在滤波器的应用区域重叠的情况下,使用im2col展开后,展开后的元素个数会多于原方块的元素个数。因此,使用im2col的实现存在比普通的实现消耗更多内存的缺点。但是,汇总成一个大的矩阵进行计算,对计算机的计算更有益处。比如,在矩阵计算的库等,矩阵计算的实现已被高度最优化,可以高速地进行大矩阵的乘法运算。因此,通过归结到矩阵计算上,可以有效地利用线性代数库。 (1)卷积层的实现? *transpose函数会更改多维数组的轴的顺序 (2)池化层的实现 *池化层的实现过程: *步骤一:展开输入数据 *步骤二:求各行的最大值 *步骤三:转换为合适的输出大小 ?5.CNN的实现? ?代码略 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/25 23:42:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |