卷积神经网络(一)

第七章 卷积神经网络

从今天开始学习卷积神经网络的内容。

本章的主题是卷积神经网络(Convolutional Neural Network,CNN)。 CNN被用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于 深度学习的方法几乎都以CNN为基础。本章将详细介绍CNN的结构,并用 Python实现其处理内容。

7.1 整体结构

CNN和之前介绍的神经网络一致,都是通过组装各个层来进行构建的。只不过其中出现了新的层:卷积层和池化层。

我们知道,相邻层所有神经元之间都有连接称为全连接(full-connected)。另外我们用Affine层实现了全连接。另外,我们用Affine层实现了全连接层。如果使用 这个Affine层,一个5层的全连接的神经网络就可以通过图7-1所示的网络结 构来实现

全连接的神经网络中,Affine层后面跟着激活函数ReLU 层(或 者 Sigmoid层)。这里堆叠了4层“Affine-ReLU”组合,然后第5层是 Affine层,最后由Softmax层输出最终结果(概率)

如果新增卷积层和池化层,就是一个CNN了。

如图7-2所示,CNN中新增了Convolution层和Pooling层。CNN的 层的连接顺序是“Convolution - ReLU -(Pooling) ”( Pooling层有时会被省略)。这可以理解为之前的“Affine - ReLU”连接被替换成了“Convolution - ReLU -(Pooling)”连接。

还需要注意的是,在图7-2的CNN中,靠近输出的层中使用了之前 的“Affi ne - ReLU”组合。此外,最后的输出层中使用了之前的“Affi ne - Softmax”组合。这些都是一般的CNN中比较常见的结构。

7.2 卷积层

CNN中出现了一些特有的术语,比如填充、步幅等。此外,各层中传 递的数据是有形状的数据(比如,3维数据),这与之前的全连接网络不同, 因此刚开始学习CNN时可能会感到难以理解。本节我们将花点时间,认真 学习一下CNN中使用的卷积层的结构。

7.2.1 全连接层的问题

之前介绍的全连接的神经网络中使用了全连接层(Affine层)。在全连接 层中,相邻层的神经元全部连接在一起,输出的数量可以任意决定。

全连接层存在什么问题呢?那就是数据的形状被“忽视”了。比如,输 入数据是图像时,图像通常是高、长、通道方向上的3维形状。但是,向全 连接层输入时,需要将3维数据拉平为1维数据。实际上,前面提到的使用 了MNIST数据集的例子中,输入图像就是1通道、高28像素、长28像素 的(1,28,28)形状,但却被排成1列,以784个数据的形式输入到最开始的 Affine层。

图像是3维形状,这个形状中应该含有重要的空间信息。比如,空间上 邻近的像素为相似的值、RBG的各个通道之间分别有密切的关联性、相距 较远的像素之间没有什么关联等,3维形状中可能隐藏有值得提取的本质模 式。但是,因为全连接层会忽视形状,将全部的输入数据作为相同的神经元 (同一维度的神经元)处理,所以无法利用与形状相关的信息。

而卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维 数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此, 在CNN中,可以(有可能)正确理解图像等具有形状的数据。

另外,CNN中,有时将卷积层的输入输出数据称为特征图(feature map)。其中,卷积层的输入数据称为输入特征图(input feature map), 输出数据称为输出特征图(output feature map)。本书中将“输入输出数据”和“特 征图”作为含义相同的词使用

7.2.2 卷积运算

卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的“滤波 器运算”。在介绍卷积运算时,我们来看一个具体的例子(图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个),这个值 会被加到应用了滤波器的所有元素上。

7.2.3 填充

在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比 如0等),这称为填充(padding),是卷积运算中经常会用到的处理。比如, 在图7-6的例子中,对大小为(4,4)的输入数据应用了幅度为1的填充。“幅 度为1的填充”是指用幅度为1像素的0填充周围。

填充的目的通常是为了保持输出数据与输入数据大小不变。

卷积运算的填充处理:向输入数据的周围填入0(图中用虚线表示填充,并省略了 填充的内容“0”)

如图7-6所示,通过填充,大小为(4,4)的输入数据变成了(6,6)的形状。 然后,应用大小为(3,3)的滤波器,生成了大小为(4,4)的输出数据。这个例 子中将填充设成了1,不过填充的值也可以设置成2、3等任意的整数。在图7-5 的例子中,如果将填充设为2,则输入数据的大小变为(8,8);如果将填充设 为3,则大小变为(10,10)。

PS:使用填充主要是为了调整输出的大小。比如,对大小为(4,4)的输入 数据应用(3,3)的滤波器时,输出大小变为(2,2),相当于输出大小 比输入大小缩小了2个元素。这在反复进行多次卷积运算的深度网 络中会成为问题。为什么呢?因为如果每次进行卷积运算都会缩小 空间,那么在某个时刻输出大小就有可能变为1,导致无法再应用 卷积运算。为了避免出现这样的情况,就要使用填充。在刚才的例 子中,将填充的幅度设为1,那么相对于输入大小(4,4),输出大小 也保持为原来的(4,4)。因此,卷积运算就可以在保持空间大小不变 的情况下将数据传给下一层。

7.2.4 步幅

应用滤波器的位置间隔称为步幅(stride)。之前的例子中步幅都是1,如 果将步幅设为2,则如图7-7所示,应用滤波器的窗口的间隔变为2个元素。

在图7-7的例子中,对输入大小为(7,7)的数据,以步幅2应用了滤波器。 通过将步幅设为2,输出大小变为(3,3)。像这样,步幅可以指定应用滤波器 的间隔。

综上,增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。 如果将这样的关系写成算式,会如何呢?接下来,我们看一下对于填充和步 幅,如何计算输出大小。

这里,假设输入大小为(H,W),滤波器大小为(FH,FW),输出大小为 (OH,OW),填充为P,步幅为S。此时,输出大小可通过式(7.1)进行计算。

OH=\frac{H+2P-FH}{S}+1

OW=\frac{W+2P-FW}{S}+1

现在,我们使用这个算式,试着做几个计算。

例1:图7-6的例子 输入大小:(4,4);填充:1;步幅:1;滤波器大小:(3,3)

OH=\frac{4+2*1-3}{1}+1=4

OW=\frac{4+2*1-3}{1}+1=4

例2:图7-7的例子 输入大小:(7,7);填充:0;步幅:2;滤波器大小:(3,3)

OH=\frac{7+2*0-3}{2}+1=3

OW=\frac{7+2*0*3}{2}+1=3

例3 输入大小:(28,31);填充:2;步幅:3;滤波器大小:(5,5)

OH=\frac{28+2*2-5}{3}+1=10

OW=\frac{28+2*2-5}{3}+1=10

如这些例子所示,通过在式(7.1)中代入值,就可以计算输出大小。这 里需要注意的是,虽然只要代入值就可以计算输出大小,但是所设定的值必 须使式(7.1)中的和分别可以除尽。当输出大小无法 除尽时(结果是小数时),需要采取报错等对策。顺便说一下,根据深度学习 的框架的不同,当值无法除尽时,有时会向最接近的整数四舍五入,不进行报错而继续运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/83518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV 多边形绘制与填充

一、知识点 1、void polylines(InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar & color, int thickness 1, int lineType LINE_8, int shift 0 ); (1)、在图像上绘制多边形曲线。 (2)、参数说明: img: 输入、输出参数&#xff0…

C#接口代码记录

using System;namespace InterfacesExample {// 定义接口public interface INBAPlayable{void KouLan();}public interface ISupermanable{void Fly();}// 基类public class Person{public void CHLSS(){Console.WriteLine("人类吃喝拉撒睡");}}// Student 类实现多个…

SpringDataJpa实体类中属性顺序与数据库中生成字段顺序不一致的问题

自己写的代码覆盖hibernate中的代码 翻了翻源码发现,很多地方都是使用LinkedHashMap或者是List来传输Entity里面的fields,于是感觉Hibernate应该是考虑到使用Entity里面定义的fields的顺序来实现建表语句里的表字段顺序的。   于是就一步步跟踪下去&…

软件架构期末复习

题型 填空题 20分,2分/空,10空 选择题 30分,2分/题,15题 简答题 30分,6分/题,5题(概念+分析) 案例分析题 20分,5个小题(综合) 分值:体系结构、设计模式各占50% 考试内容 体系结构 SA基础(SA03PPT):SA概念、SA与软件过程(阶段)的关系、SA核心概念模型(重要…

Oracle ADG 日常巡检指南

一、基础状态检查 数据库角色与模式 SELECT db_unique_name, open_mode, database_role, switchover_status FROM v$database;预期状态: 主库:OPEN_MODEREAD WRITE, DATABASE_ROLEPRIMARY备库:OPEN_MODEREAD ONLY WITH APPLY, DATABASE_ROLE…

【MV】key_moments 与 continuous_timeline的编排权衡

一、编排顺序: key_moments → continuous_timeline* 建议使用顺序:key_moments → continuous_timeline 📊 两者关系 key_moments:从continuous_timeline中精选出来的重点(约11个关键时间点)continuous_timeline:完整的时间轴(37个片段,覆盖每句歌词)🎭 实际编…

Tomcat线程模型

目录 1 Linux I/O模型 2 Linux I/O模型分类 3 Tomcat支持的I/O模型 4 Tomcat I/O模型选型 5 Tomcat NIO实现 6 Tomcat异步IO实现 1 Linux I/O模型 I/O:在计算机内存和外部设备之间拷贝数据的过程程序通过cpu向外部设备发出读指令,数据从外部设置拷贝至内…

最新Spring Security实战教程企业级安全方案设计实现

最新Spring Security实战教程(十七)企业级安全方案设计 - 多因素认证(MFA)实现 1. 前言2. 为什么需要多因素认证? 传统认证的风险MFA的核心优势常见多因素认证实现方案 3. 多因素认证的核心原理4. 系统架构与流程设计…

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…

大话软工笔记—架构的概要设计

架构的概要设计是在需求工程分析成果的基础之上对整个系统进行的顶层规划,重点是确定设计规范(理念、主线等),从大的范围和高度对业务进行规划和设计,架构概要设计的成果“业务架构图”,是后续各阶段设计的…

Flink CDC —部署模式

一、Standalone 模式 独立模式是Flink最简单的部署模式。本简短指南将向您展示如何下载最新稳定版本的Flink,安装和运行它。 您还将运行一个示例Flink CDC作业,并在web UI中查看它。 1、准备 Flink在所有类似UNIX的环境中运行,即Linux、Mac…

day029-Shell自动化编程-计算与while循环

文章目录 1. read 交互式初始化变量1.1 案例-安装不同的软件1.2 案例-比较大小 2. 计算2.1 bc2.2 awk2.3 expr2.4 let2.5 案例-计算内存的空闲率2.6 案例-检查域名过期时间和https证书过期时间 3. 循环3.1 循环控制语句3.2 for循环-c语言格式3.3 while循环3.3.1 案例-猜数字3.3…

华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio打造AingDesk AI聊天助手

华为云FlexusDeepSeek征文 | 基于华为云ModelArts Studio打造AingDesk AI聊天助手 引言一、ModelArts Studio平台介绍华为云ModelArts Studio简介ModelArts Studio主要特点 二、安装AingDesk应用AingDesk应用介绍下载地址安装AingDesk工具 三、开通DeepSeek-R1-0528商用服务访问…

深度解析Git错误:`fatal: detected dubious ownership in repository` 的根源与解决方案

如果你是在使用自己的移动硬盘(U盘)操作项目时遇到的这个问题直接执行git config --global --add safe.directory X:/path即可,只要你的移动硬盘(U盘)没有病毒就不会有安全问题。 深度解析Git错误:fatal: d…

基于Spring Boot的校园社区平台设计与实现

目录 一.🦁前言二.🦁开源代码与组件使用情况说明三.🦁核心功能1. ✅算法设计2. ✅Thymeleaf模板引擎3. ✅MyBatis Plus框架4. ✅部署项目 四.🦁演示效果1. 管理员模块1.1 用户管理1.2 浏览管理员首页1.3 论坛管理1.4 校园咨询管理…

Java 8 Map 新增方法详解

Java 8 Map 新增方法详解 1. getOrDefault 源码: default V getOrDefault(Object key, V defaultValue) {V v;return (((v get(key)) ! null) || containsKey(key))? v: defaultValue;}作用:安全获取值,若key不存在则返回默认值 示例&…

山东大学 2025 web数据管理期末复习总结

SDU-2025年-Web数据管理期末总结 考试题型 填空 :都来自于PPT中名词解释简答题:需要背一些公式。 根据L老师上课提及的重点一共总结了87问题。 文章目录 SDU-2025年-Web数据管理期末总结考试题型第1讲 绪论此章不考 第2讲 网络爬虫技术2.1 爬虫是什么…

Spring框架的设计模式

Spring 框架深度集成了多种经典设计模式,这些模式支撑了其核心功能(如IoC、AOP)的实现,以下是关键模式及其应用场景的梳理: 1、工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式…

git报错fatal: 远端意外挂断了

git报错fatal: 远端意外挂断了 报错详细内容 mr.mbogon tinymce % git add . mr.mbogon tinymce % git commit -m init [master c6cfc2a] init1 file changed, 2 insertions(), 1 deletion(-) mr.mengbogon tinymce % git push 枚举对象中: 241, 完成…

Windows 下安装 NVM

NVM 下载 NVM 在工作中,你可能遇到过某个项目需要高版本的 node 才能运行,而有的项目可能只支持低版本的 node,此时就可以借助于一些 Node 版本管理工具,比如 nvm(Node Version Manager),帮助…