CNN:Convolutional Neural Network(上)

目录

1  为什么使用 CNN 处理图像

2  CNN 的整体结构

2.1  Convolution

2.2  Colorful image

3  Convolution v.s. Fully Connected

4  Max Pooling

5  Flatten

6  CNN in Keras


原视频:李宏毅 2020:Convolutional Neural Network

1  为什么使用 CNN 处理图像

李宏毅老师提出了以下三点理由。

① Some patterns are much smaller than the whole image.

通常来讲,图片的一些样式(pattern)远比整张图片小,从而使一个神经元不需要观察整张图片就能够发现某个样式(pattern),这样做还能减少网络中的参数。

比如,可以让一个神经元专门充当鸟嘴检测器(beak detector),它只需要关注这张图片中是否出现了鸟嘴这一样式(pattern),而不需要关注整张图片中的所有样式(pattern)。

② The same patterns appear in different regions.

在不同的图片中可能存在相同的样式(pattern),但是这些样式(pattern)可能出现在图片中的不同位置。在 CNN 中,将会使用同一神经元来检测相同的样式,避免参数的冗余。

比如,针对鸟嘴这一样式(pattern),CNN 不会专门拿两个神经元来分别检测 “左上角的鸟嘴” 和 “中间的鸟嘴”,而是复用同一神经元。

③ Subsampling the pixels will not change the object.

取一张图片像素的子集可能并不会影响整张图片的内容。这样做能减小图片的大小,从而减少网络中的参数。

比如,去除这张图片中的奇数行和奇数列,图片变为原始图片的 1/4,但这并不影响我们获取图片中的内容。

2  CNN 的整体结构

CNN 的整体结构如下图所示,其中 Convolution 和 Max Pooling 结构可以叠加多次:

CNN 各部分的性质(property):

  • Convolution 实现上一节提到的 ①② 功能
  • Max Pooling 实现上一节提到的 ③ 功能

2.1  Convolution

本节将具体介绍 Convolution 模块是干啥的。

假设这里有一张非常简单的黑白图片,大小为 6×6 个像素,1 表示黑色,0 表示白色。同时,提出一个新的概念叫 “过滤器”(filter)。假设这里只有两个过滤器(filter),均为 3×3 的矩阵。

过滤器(filter)的个数不限,不同的过滤器(filter)将被用于检测图片中的不同样式(pattern),实现了上一小节中提到的 ① 号功能。

为了检测图片中的样式(pattern),这两个过滤器(filter)将会分别和图片进行一个称为卷积(convolution)的操作。下面这个动图演示得非常直观(图源:卷积层 | 鲁老师):

具体来说,就是过滤器(filter)会逐行逐列扫描整张图片。被扫描到的图片区域将会和过滤器(filter)进行逐元素相乘再相加,如下图所示:

接着,过滤器(filter)会移动一个步长(stride),和下一个被扫描到的图片区域进行卷积操作。假设步长(stride)为 1,则有:

假设步长(stride)为 2,则有:

显然,你发现过滤器扫描不到图片的一些边缘位置,因此人们提出可以为图片 “加边”,也就是加一圈 0,然后再做卷积操作。

这里我们就假设步长(stride)为 1,把所有卷积操作做完,结果如下:

众所周知,向量点积的结果值越大,代表两个向量越相似。在卷积结果中,左上角和左下角的结果值最大。追溯到原始图片,左上角和左下角的图片确实和过滤器(filter)的结构类似。而过滤器(filter)自身的数值代表一种样式,因此可以认为图片的左上角和左下角存在该过滤器(filter)代表的样式(pattern),实现了上一小节中提到的 ② 号功能。

类似地,我们做第二个过滤器(filter)和图片的卷积操作:

图片和两个过滤器(filter)分别得到两个卷积结果,被统称为 “Feature Map”,这里的卷积结果均为 4×4 的图片。

卷积结果的大小取决于图片大小、步长大小和过滤器大小。

2.2  Colorful image

在 2.1 节,我们讨论的是简单的黑白照片,每一个像素点由一个数值组成。

对于彩色照片,每一个像素点由三个数值组成,因此过滤器(filter)不再是一个二维向量,而是升级成了一个三维向量。这个第三维被称为 “通道”(channel)。

3  Convolution v.s. Fully Connected

请不要认为卷积(Convolution)是一个与全连接(Fully Connected)毫无关系的、新鲜的操作,它其实就是全连接(Fully Connected)的一个简化版。下图是两者的比较:

这里过滤器(filter)中的数值等价于全连接(Fully Connected)中的黑线,即充当一个权重的作用。换句话说,它们就是网络中的参数(parameter),是在模型训练中学习而来的。而绿框中的圆圈都代表的是一个神经元。

下面具体来看如何将 CNN 中的卷积(Convolution)操作理解为简化版的全连接。

对于全连接(Fully Connected),每个神经元等于所有输入的加权求和;而对于卷积(Convolution),每个神经元只等于部分输入的加权求和。比如,对于第一个神经元,它只需要关注 1、2、3、7、8、9、13、14、15 号输入。这样的部分连接能够减少网络中的参数!

再来看第二个神经元,由于它是和第一个神经元同属于一个过滤器(filter)卷积得到的结果,因此它连接 2、3、4、8、9、10、14、15、16 号输入的参数和第一个神经元是对应相同的。在图中,李宏毅老师用相同的颜色表示具有相同参数的连接。这样的设定又能够进一步减少网络中的参数!

4  Max Pooling

Max Pooling 模块主要实现了 CNN 的 ③ 号功能,即缩小原始图片的大小。比如,在通过卷积(Convolution)模块后我们得到以下结果:

为了缩小原始图片的大小,Max Pooling 操作可能是在一个 2×2 的范围内取其中的最大值,操作结果如下图最右侧所示:

我们最后得到的新图片将比原始图片小,同时新图片的通道数(channel)等于过滤器(filter)的个数。

5  Flatten

Flatten 模块所做的事,就是把新图片的皮展开,即把每个通道的值挨个挨个地排开,最后送入 FFN 中,如下图所示:

6  CNN in Keras

这一页介绍了每个函数参数的含义:

这一页介绍了每个过滤器(filter)含有的参数个数:

9 是因为 3×3,225 是因为 25×3×3,因为第一个 Max Pooling 后的新图片有 25 个通道(channel),因此相应地,第二个 Convolution 中的过滤器(filter)也应该有 25 个通道(channel)。


介于篇幅过长,将于下一篇介绍 CNN 的有趣应用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#灵活控制多线程的状态(开始暂停继续取消)

ManualResetEvent类 ManualResetEvent是一个同步基元,用于在多线程环境中协调线程的执行。它提供了两种状态:终止状态和非终止状态。 在终止状态下,ManualResetEvent允许线程继续执行。而在非终止状态下,ManualResetEvent会阻塞线…

深度学习-标注文件处理(txt批量转换为json文件)

接上篇,根据脚本可将coco128的128张图片,按照比例划分成训练集、测试集、验证集,同时生成相应的标注的labels文件夹,最近再看实例分离比较火的mask rcnn模型,准备进行调试但由于实验室算力不足,网上自己租的…

stm32 - GPIO

stm32 - GPIO 基本结构输入输出 基本结构 所有GPIO都挂在APB2总线上 寄存器:内核通过APB2总线对寄存器进行读写,实现电平的读写 GPIO引脚的每一位对应寄存器中的某一位 GPIO中的驱动器是增加信号驱动能力的,用于增大驱动能力 输入 读取端口的…

初识C语言·内存函数

目录 1 memcpy的使用和模拟实现 2 memmove的使用和模拟实现 3 memset的使用和模拟实现 4 memcmp的使用和模拟实现 1 memcpy的使用和模拟实现 紧接字符串函数,出场的是第一个内存函数memcpy。前面讲的字符串函数是专门干关于字符串的事的,而这个函数…

如何使用程序控制微信发送消息

简介 使用杨中科老师的nuget包NetAutoGUI,控制微信给指定用户发送消息,如果想下面视频一样使用此功能用来轰炸朋友,可以直接跳到最后一节,或者直接下载我的打包好的程序集 【免费】控制微信发送消息的程序资源-CSDN文库 微信轰炸…

蓝桥杯备赛 | 洛谷做题打卡day5

蓝桥杯备赛 | 洛谷做题打卡day5 图论起航,一起来看看深(广)度优先吧 ~ 文章目录 蓝桥杯备赛 | 洛谷做题打卡day5图论起航,一起来看看深(广)度优先吧 ~【深基18.例3】查找文献题目描述 输入格式输出格式样例…

《如何制作类mnist的金融数据集》——1.数据集制作思路

1.数据集制作思路(生成用于拟合金融趋势图像的分段线性函数) 那么如何去制作这样的一个类minist的金融趋势曲线数据集呢? 还是如上图所示,为了使类别平均分布,因此可以选取三种“buy”的曲线、三种“sell”…

Web前端 ---- 【Vue3】computed计算属性和watch侦听属性(侦听被ref和reactive包裹的数据)

目录 前言 computed watch watch侦听ref数据 ref简单数据类型 ref复杂数据类型 watch侦听reactive数据 前言 本文介绍在vue3中的computed计算属性和watch侦听属性。介绍watch如何侦听被ref和reactive包裹的数据 computed 在vue3中,计算属性computed也是组合式…

C语言天花板——指针(经典题目)

指针我们已经学习的差不多了,今天我来给大家分享几个经典的题目,来让我们相互学习🏎️🏎️🏎️ int main() {int a[4] { 1, 2, 3, 4 };int* ptr1 (int*)(&a 1);int* ptr2 (int*)((int)a 1);printf("%x,%…

Java重修第六天—面向对象3

通过学习本篇文章可以掌握如下知识 1、多态; 2、抽象类; 3、接口。 之前已经学过了继承,static等基础知识,这篇文章我们就开始深入了解面向对象多态、抽象类和接口的学习。 多态 多态是在继承/实现情况下的一种现象&#xf…

随笔03 笔记整理

图源:文心一言 关于我的考研与信息安全类博文整理~🥝🥝 第1版:整理考研类博文~🧩🧩 第2版:提前列出博文链接,以便小伙伴查阅~🧩🧩 第3版:整理We…

学习记录-自动驾驶与机器人中的SLAM技术

以下所有内容均为高翔大神所注的《自动驾驶与机器人中的SLAM技术》中的内容 融合导航 1. EKF和优化的关系 2. 组合导航eskf中的预测部分&#xff0c;主要是F矩阵的构建 template <typename S> bool ESKF<S>::Predict(const IMU& imu) {assert(imu.timestamp…

基于杂交PSO算法的风光储微网日前优化调度(MATLAB实现)

微网中包含&#xff1a;风电、光伏、储能、微型燃气轮机&#xff0c;以最小化电网购电成本、光伏风机的维护成本、蓄电池充放电维护成本、燃气轮机运行成本及污染气体治理成本为目标&#xff0c;综合考虑&#xff1a;功率平衡约束、燃气轮机爬坡约束、电网交换功率约束、储能装…

Elasticsearch_8.11.4_kibana_8.11.4_metricbeat_8.11.4安装及本地部署_ELK日志部署

文章目录 Elasticsearch_8.11.4_kibana_8.11.4_metricbeat_8.11.4安装及本地部署_ELK日志部署分布式引擎Elasticsearch_8.11.4安装及本地部署系统环境要求1 Windows 安装 Elasticsearch下载完成后进行解压,进入 bin 目录,找到elasticsearch.bat脚本文件执行一键启动.启动都选允…

【Python学习】Python学习15-模块

目录 【Python学习】Python学习15-模块 前言创建语法引入模块from…import 语句from…import* 语句搜索路径PYTHONPATH 变量-*- coding: UTF-8 -*-导入模块现在可以调用模块里包含的函数了PYTHONPATH 变量命名空间和作用域dir()函数globals() 和 locals() 函数reload() 函数Py…

ROS2学习笔记一:安装及测试

目录 前言 1 ROS2安装与卸载 1.1 安装虚拟机 1.2 ROS2 humble安装 2 ROS2测试 2.1 topic测试 2.2 小海龟测试 2.3 RQT可视化 2.4 占用空间 前言 ROS2的前身是ROS&#xff0c;ROS即机器人操作系统&#xff08;Robot Operating System&#xff09;,ROS为了“提高机器人…

原生js实现拖拽效果

<!DOCTYPE html> <html> <head> <style> #mydiv { width: 200px; height: 200px; background-color: red; position: absolute; cursor: move; } </style> | </head> <body> <div id"mydiv">拖拽我…

基于java web的机票管理系统设计与实现设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

机器学习扩散模型简介

一、说明 扩散模型的迅速崛起是过去几年机器学习领域最大的发展之一。在这本易于理解的指南中了解您需要了解的有关扩散模型的所有信息。 扩散模型是生成模型&#xff0c;在过去几年中越来越受欢迎&#xff0c;这是有充分理由的。仅在 2020 年代发布的几篇开创性论文就向世界…

socket.io分房间交流

基本详情看这里 Socket.IO 是一个库,可以在客户端和服务器之间实现 低延迟, 双向 和 基于事件的 通信. 效果展示 安装依赖 // 后端插件安装 npm i socket.io -S // 前端插件安装 npm i socket.io-client -S 前端搭建及逻辑 <script setup> import { ref, onMounted…