卷积神经网络(整体结构)
整体结构首先来看一下CNN的网络结构了解CNN的大致框架。CNN和之前介绍的神经网络一样可以像乐高积木一样通过组装层来构建。不过CNN中新出现了卷积层Convolution 层和池化层Pooling 层。卷积层和池化层将在下一节详细介绍这里我们先看一下如何组装层以构建CNN。之前介绍的神经网络中相邻层的所有神经元之间都有连接这称为全连接fully-connected。另外我们用Affine层实现了全连接层。如果使用这个Affine层一个5 层的全连接的神经网络就可以通过图7-1 所示的网络结构来实现。如图7-1 所示全连接的神经网络中Affine层后面跟着激活函数ReLU层或者Sigmoid 层。这里堆叠了4 层“Affine-ReLU”组合然后第5 层是Affine层最后由Softmax层输出最终结果概率。那么CNN会是什么样的结构呢图7-2 是CNN的一个例子。如图7-2 所示CNN 中新增了Convolution 层和Pooling 层。CNN 的层的连接顺序是“Convolution - ReLU -Pooling”Pooling 层有时会被省略。这可以理解为之前的“Affi ne - ReLU”连接被替换成了“Convolution -ReLU -Pooling”连接。还需要注意的是在图7-2 的CNN中靠近输出的层中使用了之前的“Affi ne - ReLU”组合。此外最后的输出层中使用了之前的“Affi ne -Softmax”组合。这些都是一般的CNN中比较常见的结构。卷积层CNN中出现了一些特有的术语比如填充、步幅等。此外各层中传递的数据是有形状的数据比如3 维数据这与之前的全连接网络不同因此刚开始学习CNN时可能会感到难以理解。本节我们将花点时间认真学习一下CNN中使用的卷积层的结构。全连接层存在的问题之前介绍的全连接的神经网络中使用了全连接层Affine层。在全连接层中相邻层的神经元全部连接在一起输出的数量可以任意决定。全连接层存在什么问题呢那就是数据的形状被“忽视”了。比如输入数据是图像时图像通常是高、长、通道方向上的3 维形状。但是向全连接层输入时需要将3 维数据拉平为1 维数据。实际上前面提到的使用了MNIST数据集的例子中输入图像就是1 通道、高28 像素、长28 像素的1, 28, 28形状但却被排成1 列以784 个数据的形式输入到最开始的Affine层。图像是3 维形状这个形状中应该含有重要的空间信息。比如空间上邻近的像素为相似的值、RBG的各个通道之间分别有密切的关联性、相距较远的像素之间没有什么关联等3 维形状中可能隐藏有值得提取的本质模式。但是因为全连接层会忽视形状将全部的输入数据作为相同的神经元同一维度的神经元处理所以无法利用与形状相关的信息。而卷积层可以保持形状不变。当输入数据是图像时卷积层会以3 维数据的形式接收输入数据并同样以3 维数据的形式输出至下一层。因此在CNN中可以有可能正确理解图像等具有形状的数据。另外CNN中有时将卷积层的输入输出数据称为特征图featuremap。其中卷积层的输入数据称为输入特征图input feature map输出数据称为输出特征图output feature map。本书中将“输入输出数据”和“特征图”作为含义相同的词使用。卷积运算卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的“滤波器运算”。在介绍卷积运算时我们来看一个具体的例子图7-3。如图7-3 所示卷积运算对输入数据应用滤波器。在这个例子中输入数据是有高长方向的形状的数据滤波器也一样有高长方向上的维度。假设用height, width表示数据和滤波器的形状则在本例中输入大小是(4, 4)滤波器大小是(3, 3)输出大小是(2, 2)。另外有的文献中也会用“核”这个词来表示这里所说的“滤波器”。现在来解释一下图7-3 的卷积运算的例子中都进行了什么样的计算。图7-4中展示了卷积运算的计算顺序。对于输入数据卷积运算以一定间隔滑动滤波器的窗口并应用。这里所说的窗口是指图7-4 中灰色的3 × 3 的部分。如图7-4 所示将各个位置上滤波器的元素和输入的对应元素相乘然后再求和有时将这个计算称为乘积累加运算。然后将这个结果保存到输出的对应位置。将这个过程在所有位置都进行一遍就可以得到卷积运算的输出。在全连接的神经网络中除了权重参数还存在偏置。CNN中滤波器的参数就对应之前的权重。并且CNN中也存在偏置。图7-3 的卷积运算的例子一直展示到了应用滤波器的阶段。包含偏置的卷积运算的处理流如图7-5 所示。如图7-5 所示向应用了滤波器的数据加上了偏置。偏置通常只有1 个1 × 1本例中相对于应用了滤波器的4 个数据偏置只有1 个这个值会被加到应用了滤波器的所有元素上。填充在进行卷积层的处理之前有时要向输入数据的周围填入固定的数据比如0 等这称为填充padding是卷积运算中经常会用到的处理。比如在图7-6 的例子中对大小为(4, 4) 的输入数据应用了幅度为1 的填充。“幅度为1 的填充”是指用幅度为1 像素的0 填充周围。)如图7-6 所示通过填充大小为(4, 4) 的输入数据变成了(6, 6) 的形状。然后应用大小为(3, 3) 的滤波器生成了大小为(4, 4) 的输出数据。这个例子中将填充设成了1不过填充的值也可以设置成2、3 等任意的整数。在图7-5的例子中如果将填充设为2则输入数据的大小变为(8, 8)如果将填充设为3则大小变为(10, 10)。使用填充主要是为了调整输出的大小。比如对大小为(4, 4) 的输入数据应用(3, 3) 的滤波器时输出大小变为(2, 2)相当于输出大小比输入大小缩小了2 个元素。这在反复进行多次卷积运算的深度网络中会成为问题。为什么呢因为如果每次进行卷积运算都会缩小空间那么在某个时刻输出大小就有可能变为1导致无法再应用卷积运算。为了避免出现这样的情况就要使用填充。在刚才的例子中将填充的幅度设为1那么相对于输入大小(4, 4)输出大小也保持为原来的(4, 4)。因此卷积运算就可以在保持空间大小不变的情况下将数据传给下一层。步幅应用滤波器的位置间隔称为步幅stride。之前的例子中步幅都是1如果将步幅设为2则如图7-7 所示应用滤波器的窗口的间隔变为2 个元素。在图7-7 的例子中对输入大小为(7, 7) 的数据以步幅2 应用了滤波器。通过将步幅设为2输出大小变为(3, 3)。像这样步幅可以指定应用滤波器的间隔。综上增大步幅后输出大小会变小。而增大填充后输出大小会变大。如果将这样的关系写成算式会如何呢接下来我们看一下对于填充和步幅如何计算输出大小。这里假设输入大小为(H,W)(H,W)(H,W)滤波器大小为(FH,FW)(FH, FW)(FH,FW)输出大小为(OH,OW)(OH,OW)(OH,OW)填充为P步幅为S。此时输出大小可通过式(7.1) 进行计算。根据提供的文件内容提取的公式如下OHH2P−FHS1 OH \frac{H 2P - FH}{S} 1OHSH2P−FH​1OWW2P−FWS1 OW \frac{W 2P - FW}{S} 1OWSW2P−FW​1现在我们使用这个算式试着做几个计算。当输出大小无法除尽时结果是小数时需要采取报错等对策。顺便说一下根据深度学习的框架的不同当值无法除尽时有时会向最接近的整数四舍五入不进行报错而继续运行。3维数据的卷积运算之前的卷积运算的例子都是以有高、长方向的2维形状为对象的。但是图像是3维数据除了高、长方向之外还需要处理通道方向。这里我们按照与之前相同的顺序看一下对加上了通道方向的3维数据进行卷积运算的例子。图7-8 是卷积运算的例子图7-9 是计算顺序。这里以3 通道的数据为例展示了卷积运算的结果。和2 维数据时图7-3 的例子相比可以发现纵深方向通道方向上特征图增加了。通道方向上有多个特征图时会按通道进行输入数据和滤波器的卷积运算并将结果相加从而得到输出。需要注意的是在3 维数据的卷积运算中输入数据和滤波器的通道数要设为相同的值。在这个例子中输入数据和滤波器的通道数一致均为3。滤波器大小可以设定为任意值不过每个通道的滤波器大小要全部相同。这个例子中滤波器大小为(3, 3)但也可以设定为(2, 2)、(1, 1)、(5, 5) 等任意值。再强调一下通道数只能设定为和输入数据的通道数相同的值本例中为3。结合方块思考将数据和滤波器结合长方体的方块来考虑3 维数据的卷积运算会很容易理解。方块是如图7-10 所示的3 维长方体。把3 维数据表示为多维数组时书写顺序为channel, height, width。比如通道数为C、高度为H、长度为W的数据的形状可以写成C,H,W。滤波器也一样要按channel,height, width的顺序书写。比如通道数为C、滤波器高度为FHFilterHeight、长度为FWFilter Width时可以写成C, FH, FW。在这个例子中数据输出是1 张特征图。所谓1 张特征图换句话说就是通道数为1 的特征图。那么如果要在通道方向上也拥有多个卷积运算的输出该怎么做呢为此就需要用到多个滤波器权重。用图表示的话如图7-11 所示。图7-11 中通过应用FN个滤波器输出特征图也生成了FN个。如果将这FN个特征图汇集在一起就得到了形状为(FN, OH,OW) 的方块。将这个方块传给下一层就是CNN的处理流。如图7-11 所示关于卷积运算的滤波器也必须考虑滤波器的数量。因此作为4 维数据滤波器的权重数据要按(output_channel, input_channel, height, width) 的顺序书写。比如通道数为3、大小为5 × 5 的滤波器有20 个时可以写成(20, 3, 5, 5)。卷积运算中和全连接层一样存在偏置。在图7-11 的例子中如果进一步追加偏置的加法运算处理则结果如下面的图7-12 所示。图7-12 中每个通道只有一个偏置。这里偏置的形状是(FN, 1, 1)滤波器的输出结果的形状是(FN, OH,OW)。这两个方块相加时要对滤波器的输出结果(FN, OH,OW) 按通道加上相同的偏置值。另外不同形状的方块相加时可以基于NumPy的广播功能轻松实现1.5.5 节。批处理神经网络的处理中进行了将输入数据打包的批处理。之前的全连接神经网络的实现也对应了批处理通过批处理能够实现处理的高效化和学习时对mini-batch 的对应。我们希望卷积运算也同样对应批处理。为此需要将在各层间传递的数据保存为4 维数据。具体地讲就是按(batch_num, channel, height, width)的顺序保存数据。比如将图7-12 中的处理改成对N个数据进行批处理时数据的形状如图7-13 所示。图7-13 的批处理版的数据流中在各个数据的开头添加了批用的维度。像这样数据作为4 维的形状在各层间传递。这里需要注意的是网络间传递的是4 维数据对这N个数据进行了卷积运算。也就是说批处理将N次的处理汇总成了1 次进行。

相关新闻

2023年信奥赛C++提高组csp-s初赛真题及答案解析(完善程序第2题)

2023年信奥赛C++提高组csp-s初赛真题及答案解析(完善程序第2题)

2023年信奥赛C提高组csp-s初赛真题及答案解析(完善程序第2题) #### 第2题 (最大值之和)给定整数序列 a0,⋯,an−1a_0,⋯,a_{n−1}a0​,⋯,an−1​,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105和…

2026/5/17 3:55:15 阅读更多 →
【完整源码+数据集+部署教程】交通标线车道线分割系统源码&数据集分享 [yolov8-seg-C2f-EMSC&yolov8-seg-SPPF-LSKA等50+全套改进创新点发刊_一键训练教程_We

【完整源码+数据集+部署教程】交通标线车道线分割系统源码&数据集分享 [yolov8-seg-C2f-EMSC&yolov8-seg-SPPF-LSKA等50+全套改进创新点发刊_一键训练教程_We

背景意义 随着城市化进程的加快,交通管理面临着日益严峻的挑战。交通标线作为道路交通管理的重要组成部分,不仅为驾驶员提供了行驶指引,还在交通安全中发挥着不可或缺的作用。传统的交通标线检测方法多依赖于人工标注和规则识别,效…

2026/5/17 3:55:14 阅读更多 →
【完整源码+数据集+部署教程】航拍区域图像分割系统源码&数据集分享 [yolov8-seg-C2f-DAttention&yolov8-seg-HGNetV2等50+全套改进创新点发刊_一键训练教程

【完整源码+数据集+部署教程】航拍区域图像分割系统源码&数据集分享 [yolov8-seg-C2f-DAttention&yolov8-seg-HGNetV2等50+全套改进创新点发刊_一键训练教程

背景意义 随着无人机技术的迅猛发展,航拍图像在环境监测、城市规划、农业管理等领域的应用愈发广泛。航拍图像的高分辨率和大范围覆盖能力,使其成为获取地面信息的重要手段。然而,如何从海量的航拍图像中快速、准确地提取出有用的信息&#…

2026/7/4 14:38:55 阅读更多 →

最新新闻

Folia:全屏沉浸式在线音乐播放器,多端体验+AI 主题生成带来独特听歌感受!

Folia:全屏沉浸式在线音乐播放器,多端体验+AI 主题生成带来独特听歌感受!

Folia 是一款以全屏沉浸式歌词播放为核心的在线音乐播放器,支持多平台,具备智能歌词匹配、AI 生成配色主题等功能,为用户带来独特听歌体验。项目亮点与特色Folia 支持网易云、navidrome 和本地音乐库。其独特之处在于智能歌词匹配&#xff0c…

2026/7/5 9:26:38 阅读更多 →
SQL注入攻防全解析:从原理到实战,掌握Web安全核心漏洞

SQL注入攻防全解析:从原理到实战,掌握Web安全核心漏洞

1. 项目概述:为什么SQL漏洞是面试官的“心头好”? 干了这么多年安全,也面过不少人,我发现一个挺有意思的现象:无论你是应聘渗透测试、安全开发还是安全运维,面试官几乎都会把SQL注入漏洞拎出来问一遍。从“…

2026/7/5 9:26:37 阅读更多 →
Weex架构安卓商城APP逆向工程包:含完整源码结构、APK资源解包与AndroidX/Support双兼容支持

Weex架构安卓商城APP逆向工程包:含完整源码结构、APK资源解包与AndroidX/Support双兼容支持

本文还有配套的精品资源,点击获取 简介:一套真实上线商城App的逆向分析成果,主逻辑基于Weex框架(main.js驱动),集成weex-main-jsfm.js、weex-rax-api.js等核心运行时模块,支持RAX组件开发&am…

2026/7/5 9:20:36 阅读更多 →
山东大学编译原理PL0实验代码:Java实现的词法扫描、递归下降语法分析与P-code解释器

山东大学编译原理PL0实验代码:Java实现的词法扫描、递归下降语法分析与P-code解释器

本文还有配套的精品资源,点击获取 简介:一套开箱即用的PL/0语言编译器教学实现,基于Java开发,完整覆盖编译流程三大阶段:词法分析通过GETSYM函数识别关键字、标识符、数字和分界符;语法分析采用递归下降…

2026/7/5 9:18:36 阅读更多 →
从零部署Hermes Agent:构建可自我进化的AI智能体框架

从零部署Hermes Agent:构建可自我进化的AI智能体框架

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一个能自我进化的 AI 智能体项目——Hermes Agent。它由 Nous Research 团队开源,在 GitHub 上已经获得了超过…

2026/7/5 9:18:36 阅读更多 →
MATLAB图形化图像水印工具:支持DCT/DWT嵌入提取与攻击测试

MATLAB图形化图像水印工具:支持DCT/DWT嵌入提取与攻击测试

本文还有配套的精品资源,点击获取 简介:一套开箱即用的MATLAB图像水印实验工具,带可视化操作界面(shuiyin.fig),支持离散余弦变换(DCT)和离散小波变换(DWT&#xff09…

2026/7/5 9:14:35 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻