(2023版)斯坦福CS231n学习笔记:DL与CV教程 (56) | 卷积神经网络

news2024/11/17 0:04:59

在这里插入图片描述

前言

  • 📚 笔记专栏:斯坦福CS231N:面向视觉识别的卷积神经网络(23)
  • 🔗 课程链接:https://www.bilibili.com/video/BV1xV411R7i5
  • 💻 CS231n: 深度学习计算机视觉(2017)中文笔记:https://zhuxiaoxia.blog.csdn.net/article/details/80155166
  • 🔥 2023最新课程PPT:https://download.csdn.net/download/Julialove102123/88734395

⚠️ 本节重点内容

  1. 卷积神经网络的历史
  2. 卷积神经网络与常规神经网络的对比;
  3. CNN 卷积层、池化层、ReLU层、全连接层;
  4. CNN 局部连接、参数共享、最大池化、步长、零填充 、数据体尺寸
  5. CNN 层的规律与尺寸设置
  6. CNN 经典案例

本章(lecture5)花了很大篇幅介绍了卷积网络发展进程和基础的一些信息,这里不做详细记录,感兴趣可以直接看PPT!我们直接结合第五节的部分内容进入卷积神经网络部分Lecture6。

一、卷积神经网络的历史(略)

可参考PPT回顾。

二、常规神经网络和卷积神经网络

2.1 常规神经网络

常规神经网络的输入是一个向量,比如把一张32x32x3的图片延展成3072x1的列向量x,然后在一系列的隐层中对它做变换。

每个隐层都是由若干的神经元组成,每个神经元都与前一层中的所有神经元连接(这就是全连接的概念)。 但是在一个隐层中,神经元相互独立不进行任何连接。
在这里插入图片描述

存在问题:全连接神经网络在处理大的图片数据时参数会急速增加,即全连接方式效率不高,且参数量大,可能会导致网络过拟合。。

2.2 卷积神经网络

与常规神经网络不同,卷积神经网络的各层中的神经元都是 3 维的:宽度、高度和深度在这里插入图片描述
在这里插入图片描述
多个滤波器和多个偏置项;
在这里插入图片描述
多个batch的输入
在这里插入图片描述

2.3 对比

卷积神经网络(CNN / ConvNet) 和常规神经网络非常相似:
在这里插入图片描述
相同点

  1. 都是由神经元组成,神经元中有具有学习能力的权重和偏置项。每个神经元都得到一些输入数据,进行内积运算后再进行激活函数运算;
  2. 整个网络依旧是一个可导的评分函数,该函数的输入是原始的图像像素,输出是不同类别的评分;
  3. 在最后一层(往往是全连接层),网络依旧有一个损失函数(比如 SVM 或 Softmax),并且在神经网络中我们实现的各种技巧和要点依旧适用于卷积神经网络。
    卷积神经网络的结构基于输入数据是图像,向结构中添加了一些特有的性质,使得前向传播函数实现起来更高效,并且大幅度降低了网络中参数的数量。

差异点: 常规神经网络,每个神经元和上层的神经元都是全连接的;卷积神经网络,每个神经元都有三个维度,网络每一层都将 3D 的输入数据变化为神经元 3D 的激活数据并输出。红色的输入层装的是图像,所以它的宽度和高度就是图像的宽度和高度,它的深度是3(代表了R/红、G/绿、B/蓝3个颜色通道)。蓝色的部分是第一层卷积层的输出,表明有多种滤波器。

三、卷积神经网络

3.1 基础结构

一个简单的卷积神经网络是由各种层按照顺序排列组成,卷积神经网络主要由三种类型的层构成:卷积层,池化(Pooling)层和全连接层(全连接层和常规神经网络中的一样)。通过将这些层叠加起来,就可以构建一个完整的卷积神经网络。
在这里插入图片描述
在这里插入图片描述
卷积神经网络一层一层地将图像从原始像素值变换成最终的分类评分值。

在这里插入图片描述

卷积层和全连接层(CONV/FC)对输入执行变换操作的时候,不仅会用到激活函数,还会用到很多参数(神经元的权值和偏置项)ReLU层和池化层进行一个固定的函数操作。卷积层、全连接层和池化层有超参数,ReLU 层没有。卷积层和全连接层中的参数利用梯度下降训练。

实际应用的时候,卷积网络是由多个卷积层依次堆叠组成的序列,然后使用激活函数(比如ReLU函数)对其进行逐一处理。然后这些卷积层、激活层、池化层会依次堆叠,上一层的输出作为下一层的输入。每一层都会使用多个卷积核,每个卷积核对用一个激活映射。

3.2 卷积可视化

卷积网络这些卷积层的所有卷积核完成训练后,会发现:
在这里插入图片描述

  • 前面几个卷积层的卷积核捕捉和匹配的是一些比较简单的特征,比如边缘;
  • 中间几层的卷积核代表的特征变得复杂一些,比如一些边角和斑点;
  • 最后几层的特征就会变得特别丰富和复杂。
    这些卷积核是从简单到复杂的特征序列。这实际上和 Hubel & Wiesel 的实验结果比较相似,即使在我们并没有明确的让网络去学习这些从简单到复杂的特征,但是给它这种层次结构并经过反向传播训练后,这些类型的卷积核最终也能学到。
    在这里插入图片描述
    比如图中上方红框中的第一个卷积核对应得到红框的激活映射,卷积核看起来像是一个定向边缘的模板,所以当其滑过图像,在那些有定向边缘的地方会得到较高的值。之所以称作卷积,只是计算形式上就是卷积,滤波器和信号(图像)的元素相乘后求和。

3.3 网络结构

1. 卷积层(Convolutional Layer,Conv layer)

卷积层是构建卷积神经网络的核心层,网络中大部分的计算量都由它产生。
卷积层的参数是由一些可学习的滤波器(filter) 集合构成的。每个滤波器在宽度和高度上都比较小,但是深度和输入数据一致。
在这里插入图片描述

  • 激活映射(activation map):图像和滤波器卷积计算生成的产物;

网络会让滤波器学习,结果是当它看到某些类型的视觉特征时就激活,具体的视觉特征可能是某些方位上的边界,或者在第一层上某些颜色的斑点,甚至可以是网络更高层上的蜂巢状或者车轮状图案

  • 参数共享(Parameter sharing):在卷积层中使用参数共享是用来控制参数的数量。

一些参数相同的神经元在原图像的不同位置做内积得到的输出数据组成的。每张激活图对应的所有神经元参数都相同(因为实际上就是同一个滤波器在图像上不同位置滑动的结果,每到一个位置就是一个神经元)

  • 稀疏连接(Sparsity of connections):卷积层每个神经元和原图像只在一个小区域进行全连接。因为在处理图像这样的高维度输入时,让每个神经元都与前一层中的所有神经元进行全连接是不现实的。

局部连接的空间大小叫做神经元的感受野(receptive field)
,它的尺寸(其实就是滤波器的空间尺寸)是一个超参数。在深度方向上,这个连接的大小总是和输入量的深度相等。即连接在空间(宽高)上是局部的,但是在深度上总是和输入数据的深度一致。

  • 深度(Depth) :卷积层中使用的滤波器往往有多个,深度就是滤波器的数量。

每个滤波器在输入数据中匹配计算不同的模式。比如第一个卷积层的输入是原始图像,那么在深度维度上的不同神经元将可能被原图像上不同方向的边界,或者是颜色斑点激活。将这些沿着深度方向排列、感受野相同的神经元集合称为深度列(depth column),或者纤维(fibre)

  • 步长(Stride):步长就是滤波器每次移动跨越的像素数量。

当步长为1,滤波器每次移动1个像素。当步长为2(实际中很少使用比2大的步长),滤波器滑动时每次移动2个像素。这个操作会让输出数据体在空间上变小。

  • 零填充(Zero Padding):在图像的边界外填充零像素点。

滑动时会使输出数据体在空间上变小,我们不希望这样,于是引入了零填充,零填充有一个良好性质,可以控制输出数据体的空间尺寸(最常用的是用来保持输入数据体在空间上的尺寸,这样输入和输出的宽高都相等)。

  • 输出尺寸 ( W + 2 P − F ) / S + 1 (W + 2P -F)/S + 1 (W+2PF)/S+1

假如输入数据体WxW公式,卷积层中神经元的感受野尺寸FxF,步长 S和零填充的数量P,则输出数据体的空间尺寸为 ( W + 2 P − F ) / S + 1 (W + 2P -F)/S + 1 (W+2PF)/S+1

  • 反向传播:卷积操作的反向传播(同时对于数据和权重)还是一个卷积(但是是在空间上翻转的滤波器)。

在反向传播的时候,需要计算每个神经元对它的权重的梯度,所以需要把同一个深度切片上的所有神经元对权重的梯度进行累加,这样就得到了对这个共享权重的梯度。这样,每个切片只更新一个权重集。

  • 其他卷积类型
    • 1 X 1 卷积:主要是起到升降维的作用。
      在这里插入图片描述

    • 扩张(空洞)卷积:有效扩大感受野。(左:普通;右:空洞)
      在这里插入图片描述

2. 池化层(Pooling Layer,POOL Layer)

通常在连续的卷积层之间会周期性地插入一个池化层。作用是逐渐降低数据体的空间(宽、高)尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。池化层也不用零填充,并且池化滤波器间一般没有重叠,步长等于滤波器尺寸。
在这里插入图片描述

  • 池化方式:最大池化(max pooling)、平均池化(average pooling)、 L2 范式池化(L2-norm pooling)
  • 输出尺寸
    在这里插入图片描述
  • 反向传播

m a x ( x , y ) max(x,y) max(xy)函数的反向传播可以简单理解为将梯度只沿最大的数回传。> 在前向传播经过池化层的时候,通常会把池中最大元素的索引记录下来(有时这个也叫作道岔switches),这样在反向传播的时候梯度路由就很高效。

3. 归一化层(Normalization Layer)

在卷积神经网络的结构中,提出了一些归一化层的概念,想法是为了实现在生物大脑中观测到的抑制机制。但是这些层渐渐都不再流行,因为实践证明它们的效果即使存在,也是极其有限的。
在这里插入图片描述

4. 全连接层(Fully-connected Layer,FC Layer)

神经元对于前一层中的所有激活数据是全连接的,这个和常规神经网络中一样,通常会把前一层数组拉成一个向量,与W的每个行向量进行点积,得到每一类的分数。

最后一个池化层输出的结果是数据经过整个网络累计得到的,前几个卷积层可能检测一些比较简单的特征比如边缘,得到边缘图后输入到下一个卷积层,然后进行更复杂的检测,这样层层下来,最后一层的结果可以看成是一组符合模板的激活情况,比较大的值表明之前的所有检测结果都比较大,激活程度高,这样就汇聚了大量的信息。

虽然输出的数据比较简单,但却是非常复杂的滤波器(或特征)激活后的情况,特征在卷积核中体现,所以输出的激活图看起来就会很简单,但是这个激活图却能说明复杂特征的激活程度,用来评分是非常合理的。
在这里插入图片描述

3.4 常见结构

卷积神经网络通常是由三种层构成:卷积层,池化层和全连接层(简称FC)。ReLU 激活函数也应该算是一层,它逐元素地进行激活函数操作。

卷积神经网络最常见的形式就是将一些卷积层和 ReLU 层放在一起,其后紧跟池化层,然后重复如此直到图像在空间上被缩小到一个足够小的尺寸,在某个地方过渡成成全连接层也较为常见。最后的全连接层得到输出,比如分类评分等。

换句话说,最常见的卷积神经网络结构如下:

INPUT → [[CONV → RELU]*N → POOL?]*M → [FC → RELU]*K → FC

其中 * 指的是重复次数,POOL? 指的是一个可选的池化层。其中 N>1(通常N≤3),M≥0,K≥0(通常K<3).

🔥经验:几个小滤波器卷积层的组合比一个大滤波器卷积层好。

四、常见神经网络

参看:https://www.showmeai.tech/article-detail/222
这里不会一个一个复习了,之前研究过,直接带过!
在这里插入图片描述
AlexNet 表明,可以使用 CNN 来训练计算机视觉模型。
ZFNet 和 VGG 表明,更大的网络效果更好
GoogLeNet 是最早使用 1x1 瓶颈卷积和全局平均池而不是 FC 层来提高效率的网络之一
ResNet 向我们展示了如何训练深度极高的网络

  • 仅受 GPU 和内存限制!
  • 随着网络规模的扩大,收益也在减少

ResNet 之后: CNN 优于人类指标,重点转向高效网络:

  • 大量针对移动设备的微型网络: MobileNet、ShuffleNet 神经架构搜索现在可以自动进行架构设计。

五、迁移学习

概念:基于新的数据微调未冻结的层。

计算机视觉是一个经常用到迁移学习的领域。在搭建计算机视觉的应用时,相比于从头训练权重,下载别人已经训练好的网络结构的权重,用其做预训练模型,然后转换到自己感兴趣的任务上,有助于加速开发。

对于类似前面提到的 VGG / ResNet / Inception 等训练好的卷积神经网络,可以冻结住所有层,只训练针对当前任务添加的 Softmax 分类层参数即可。在这里插入图片描述
大多数深度学习框架都允许用户指定是否训练特定层的权重。冻结的层由于不需要改变和训练,可以看作一个固定函数。可以将这个固定函数存入硬盘,以便后续使用,而不必每次再使用训练集进行训练了。这个做法适用于小数据集场景。

如果你有一个更大的数据集,应该冻结更少的层,然后训练后面的层。越多的数据意味着冻结越少的层,训练更多的层。如果有一个极大的数据集,你可以将开源的网络和它的权重整个当作初始化 (代替随机初始化),然后训练整个网络。
在这里插入图片描述

案例:
在这里插入图片描述

六、参考资料

  1. 🔥强推🔥ConvNetJS CIFAR-10 demo 可视化整个网络的训练过程以及中间产物

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

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

相关文章

多目标优化中常用的差分进化算法DE【2】

# 多目标优化中常用的进化算法 1、链接一 2、链接二 #后续继续补充多目标的差分进化算法MODE的应用 此链接介绍很详细&#xff0c;此处用来分享学习&#xff0c;后续有问题会继续进行补充。 如果你觉得不错&#xff0c;佛系随缘打赏&#xff0c;感谢&#xff0c;你的支持是…

(六)深入理解Bluez协议栈之“GATT Client Profile”

前言: 本章节我们继续介绍GATT Client Profile的实现,参考的程序是tools\btgatt-client.c,需要注意的一点,在./configure时,需要添加 --enable-test --enable-testing才会编译该c文件,编译完成后,生成的可执行程序为btgatt-client。本文主要以btgatt-client运行时可能会…

分布式ID(2):雪花算法生成ID

1 雪花算法简介 这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等,比如在snowflake中的64-bit分别表示如下图(图片来自网络)所示: 41-bit的时间可以表示(1L&l…

ARM 1.16

TCP的特点 面向连接 面向连接&#xff0c;是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”&#xff0c;这样能建立可靠的连接。建立连接&#xff0c;是为数据的可靠传输打下了基础。 仅支持单播传输 每条TCP传输连接只能有两个端点&#…

面试题16.15.珠玑妙算

前言 这两天突然发现力扣上还是有我能写出来的题的&#xff0c;虽说都是简单级别的&#xff08;以及一道中等的题&#xff09;&#xff0c;但是能写出来力扣真的太开心了&#xff0c;&#xff08;大佬把我这段话当个玩笑就行了&#xff09;&#xff0c;于是乎&#xff0c;我觉…

linux单机部署mysql(离线环境解压即可)

一、下载官网压缩包&#xff08;tar.gz&#xff09; MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/根据自己的操作系统发行版本、位数、gclib版本、mysql版本来选择对应的压缩包 比如我是 linux系统debian10&#xff08;官网只有linux ge…

Doris配置外表以及多个Hive外表的配置

1.场景分析 以Clickhouse、Doris、Starrocks等为代表的mpp分析数据库正在快速的兴起&#xff0c;以其高效查询、跨库整合能力收到广大技术人员的喜爱。本文主要浅显介绍下作者在使用Doris时&#xff0c;通过建立catlog进行跨库查询。 废话不多少&#xff0c;直接上代码 2.相关…

RIP基础实验配置

要使用RIP完成以上命令需求 1&#xff0c;首先划分ip地址 有图可见有四个网段需要划分 192.168.1.0/26 192.168.3.0/26 192.168.7.0/26 192.168.5.0/26 给两个骨干网段&#xff0c;给两个环回接口&#xff0c;由下图所示&#xff1a; 其次&#xff0c;规划好ip后在各个接口…

hash应用

目录 一、位图 1.1、引出位图 1.2、位图的概念 1.3、位图的应用 1.4、位图模拟实现 二、布隆过滤器 2.1、什么是布隆过滤器 2.2、布隆过滤器应用的场景 2.3、布隆过滤器的原理 2.4、布隆过滤器的查找 2.5、布隆过滤器的插入 2.6、布隆过滤器的删除 2.7、布隆过滤器…

操作系统-操作系统的运行机制(内核程序 应用程序 特权指令 非特权指令 内核态 用户态 变态)

文章目录 总览预备知识&#xff1a;程序是如何运行的&#xff1f;内核程序vs应用程序特权指令vs非特权指令内核态vs用户态用户态&#xff0c;内核态的切换小结 总览 预备知识&#xff1a;程序是如何运行的&#xff1f; 转换为机器码放入内存&#xff0c;然后按顺序执行 内核…

跟着pink老师前端入门教程-day06

十一、CSS 的背景 通过CSS背景属性&#xff0c;可以给页面元素添加背景样式 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 11.1 背景颜色 background-color 属性定义了元素的背景颜色 一般情况下元素背景颜色默认值是transparent&…

[足式机器人]Part2 Dr. CAN学习笔记- Kalman Filter卡尔曼滤波器Ch05-1+2

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - Kalman Filter卡尔曼滤波器 Ch05-12 1. Recursive Algirithm 递归算法2. Data Fusion 数据融合Covarince Matrix协方差矩阵State Space状态空间方程 Observation观测器 1. Recursive Algirithm…

[力扣 Hot100]Day7 接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 出处 思路 就是寻找“凹”形区间&#xff0c;找使得左右两端点为最大的两个值的最长区间。这里我分了两种情况&#xff0c;右边大于等于左边…

【前端设计】输入框

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 html <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

Message queue 消息队列--RabbitMQ 【基础入门】

一&#xff0c;Message queue介绍&#xff1a; 1.1使用消息队列的优点&#xff1a; 服务之间最常见的通信方式是直接调用彼此来通信,消息从一端发出后立即就可以达到另一端,称为即时消息通讯(同步通信) 消息从某一端发出后,首先进入一个容器进行临时存储,当达到某种条件后,再由…

数据集成时表模型同步方法解析

01 背景介绍 数据治理的第一步&#xff0c;也是数据中台的一个基础功能 — 即将来自各类业务数据源的数据&#xff0c;同步集成至中台 ODS 层。业务数据源多种多样&#xff0c;单单可能涉及到的主流关系型数据库就有近十种。功能更加全面的数据中台通常还具有对接非关系型数据…

c++:基于c语言基础上的语法不同(1)

前言&#xff1a;此篇文章适合学完c语言基础概念的同学&#xff0c;是帮助c向c语言的同学快速掌握基本语法。 基础格式 #include<iostream>using namespace std; int main() {system("pause");return 0; } 输入&#xff1a; cin>>a;//a是输入内容 输出…

使用Python的pygame库实现下雪的效果

使用Python的pygame库实现下雪的效果 关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 先给出效果图&#xff1a; 源码如下&#xff1a; import pygame import random# 初始化pygame pygame.init()# 设置屏幕尺寸 width…

深入理解Redis数据结构

目录 Redis的单线程 Redis单线程快的原因 Redis 单线程处理高并发客户端连接 Redis数据结构 字符串&#xff08;String&#xff09; 常用方法 数据结构 哈希表&#xff08;Hash&#xff09; 常用方法 数据结构 列表&#xff08;List&#xff09; 常用方法 数据结构…

[bat]0基础实现自动化办公-基于start实现一键打开常用软件/文档

一、应用背景 每次开机时&#xff0c;都要一个个打开常用软件&#xff0c;比如微信、QQ或是word文档、excel表格等程序&#xff0c;比较费时。 二、方案 使用bat脚本中的start方法&#xff0c;通过将需要打开的程序或文件写入到bat脚本中&#xff0c;运行bat脚本从而实现一键…