政安晨:【深度学习神经网络基础】(十三)—— 卷积神经网络

目录

概述

LeNet-5

卷积层

最大池层

稠密层

针对MNIST数据集的卷积神经网络

总之


政安晨的个人主页政安晨

欢迎 👍点赞✍评论⭐收藏

收录专栏政安晨的机器学习笔记

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

CNN是一种神经网络技术,它已深刻地影响了计算机视觉领域。

Fukushima(1980)引入了卷积神经网络的原始概念,LeCun、Bottou、Bengio和Haffner(1998)大大改进了这个概念。通过这项研究,Yann LeCun引入了著名的LeNet-5神经网络架构。本章介绍具有LeNet-5风格的卷积神经网络。

尽管主要是在计算机视觉领域使用CNN,但该技术在这个领域之外也有一些应用。你需要认识到,如果要在非可视数据上使用CNN,则必须找到一种对数据进行编码的方法,让它可以模拟可视数据的属性。

概述

卷积神经网络(Convolutional Neural Network,CNN)是一种常用于处理具有网格结构数据的神经网络模型。它在人工智能机器学习中被广泛应用于计算机视觉和图像识别任务。

CNN的核心思想是通过卷积层和池化层来提取图像特征,然后通过全连接层和输出层进行分类或回归。具体而言,CNN通过使用多个卷积核来对输入图像进行卷积操作,这样可以从原始图像中提取出不同的特征。卷积操作可以捕捉到图像中的空间局部关系,例如边缘、纹理等信息。

在卷积层之后,通常会使用池化层来降低特征图的空间尺寸,同时保留关键的特征。池化操作可以有选择地减少特征图的大小,从而减少计算量,并提取图像的局部不变特征。

在全连接层中,特征图通过展平操作,然后与权重矩阵相乘,最后通过激活函数进行非线性变换。最后,输出层根据具体任务选择相应的激活函数来进行分类或回归。

CNN的训练过程主要通过反向传播算法进行优化,目标是最小化损失函数。通常使用梯度下降方法来更新网络的权重和偏置,以使网络能够学习到更好的特征表达和分类能力。

总之,卷积神经网络是一种在人工智能机器学习中广泛应用于计算机视觉和图像识别任务的算法,它通过卷积层和池化层来提取图像特征,然后通过全连接层和输出层进行分类或回归。它的优势在于能够自动学习图像中的特征,并能够处理具有网格结构的数据。

CNN有点类似于我们以前提到的“自组织映射”中讨论的SOM。向量元素的顺序对训练至关重要。相比之下,大多数不是CNN或SOM的神经网络都将其输入数据看成值的长向量,在这个向量中传入特征的排列顺序是无关紧要的。对于这些类型的神经网络,训练神经网络后就无法更改传入特征的排列顺序。换言之,CNN和SOM不遵循输入向量的标准处理。

SOM将输入排列成网格这种安排对图像效果很好,因为互相邻近的像素对彼此很重要。显然,图像中像素的顺序很重要。人体就是这类顺序的一个相关例子——对于脸部的设计,我们习惯于眼睛彼此靠近。同样地,类似SOM的神经网络坚持这样的像素顺序。因此,它们在计算机视觉领域中有许多应用。

尽管SOM和CNN相似都采用了将输入映射到2D网格,甚至更高维度的对象(如3D盒子)的方式,但CNN将图像识别提升到了更高的水平CNN的这一进步缘于对生物眼睛的多年研究。换言之,CNN利用重叠的输入视野(field)来模拟生物眼睛的特征。在这项突破之前,人工智能一直无法复制生物视觉的功能。

过去,缩放、旋转和噪声为AI计算机视觉研究带来了挑战。

在下面的例子中,你可以看到生物眼睛的复杂性。一个朋友举起一张纸,上面写着一个很大的数字。当你的朋友离你越来越近时,这个数字仍然可以被识别。当你的朋友旋转纸张时,你仍然可以识别该数字。最后,你的朋友通过在纸上画上线条,产生噪声,你仍然可以识别该数字。如你所见,这些例子演示了生物眼睛的高级功能,让你可以更好地了解CNN的研究突破。也就是说,在计算机视觉领域,该神经网络能处理缩放、旋转和噪声。

LeNet-5

我们可以将LeNet-5架构用于图形、图像的分类。采用这种架构的神经网络类似于我们在前几章中讨论的前馈神经网络。数据从输入流向输出。但是,LeNet-5神经网络包含几种不同的层类型,如下图所示:

前馈神经网络和LeNet-5神经网络之间存在几个重要区别:

● 前馈神经网络传递向量,LeNet-5神经网络传递3D立方体数据集。

● LeNet-5神经网络包含多种层类型。

● 计算机视觉是LeNet-5的主要应用。

我们也探讨了这些网络之间的许多相似之处。最重要的相似之处在于,我们可以使用相同的基于反向传播的技术来训练LeNet-5。

所有优化算法都可以训练前馈或LeNet-5神经网络的权重。具体来说,你可以使用模拟退火、遗传算法和粒子群优化进行训练。LeNet-5经常使用反向传播训练。

以下三种类型的层构成了最初的LeNet-5神经网络:

● 卷积层;

● 最大池层;

● 稠密层。

其他神经网络框架会添加与计算机视觉有关的其他层类型。但是,我们不会探讨超出LeNet-5以外的内容。添加新的层类型是扩大现有神经网络研究的一种常用方法。以后咱们将会基于“Dropout和正则化”的主题介绍一种附加的层类型,该类型旨在通过添加一个Dropout层来减少过拟合。

现在,我们将讨论集中在与CNN相关的层类型上。我们从卷积层开始。

卷积层

我们要探讨的第一层是卷积层。我们从一些超参数开始,它们是在支持CNN的大多数神经网络框架中必须为卷积层指定的:

● 滤波器(filter)数量;

● 滤波器大小;

● 卷积步长(stride);

● 填充(padding);

● 激活函数/非线性。

卷积层的主要目的是检测特征,如边缘、线条、颜色斑点和其他视觉元素。

滤波器可以检测到这些特征。我们为卷积层提供的滤波器越多,它可以检测到的特征就越多。

滤波器是扫描图像的方形对象。较小的网格可以代表网格的各个像素。

你可以将卷积层视为一个较小的网格,它在图像的每一行上从左向右扫描。还有一个超参数可以指定方形滤波器的宽度和高度。

上图展示了这个配置,其中你可以看到6个卷积滤波器扫描图像网格。

卷积层与它的上一层(即图像网格)之间具有权重。每个卷积层上的每个像素都是一个权重。因此,卷积层与其上一层(即图像视野)之间的权重数如下:

[Filter Size] * [Filter Size] * [Number of Filters]

如果10个滤波器的尺寸都为5(即代表5×5),则共有250个权重。

你需要理解卷积滤波器如何扫描上一层的输出或图像网格。下图展示了一个卷积滤波器。

上图展示的卷积滤波器,大小为4,填充大小为1。填充大小决定了滤波器扫描区域中的零边界。

即使图像实际大小为8×7,额外的填充也为滤波器扫描提供了9×8的虚拟图像大小。步长指定卷积滤波器每次扫描将停在什么位置。卷积滤波器向右移动,按步长中指定的单元格数前进。一旦到达最右边,卷积滤波器将移回最左边,然后向下移动一个步长,然后再次向右移动。

上述过程存在与步长大小相关的一些限制。显然,步长不能为0。如果将步长设置为0,则卷积滤波器将永远不会移动。此外,步长和卷积滤波器的大小都不能大于前面的网格。对于宽度为w的图像,步长g、填充[插图]和滤波器宽度p还有其他限制。具体来说,卷积滤波器必须能从最左上的边界开始,移动一定步长,然后到达最右下的边界。下面公式展示了卷积滤波器穿过图像必须走的步数:

步数必须是整数。换言之,它不能有小数位。调整填充(p)的目的是使上面公式得到整数结果。

当卷积滤波器扫描图像时,我们可以使用相同的权重集。这个过程允许卷积层共享权重,并大大减少所需的处理量。这样,你就可以在一系列移动的位置上识别图像,因为相同的卷积滤波器会扫描整个图像。

卷积层的输入和输出都是3D盒子。对于卷积层的输入,盒子的宽度和高度等于输入图像的宽度和高度,盒子的深度等于图像的颜色深度。对于RGB图像,深度为3,即红色、绿色和蓝色的分量。如果卷积层的输入是另一层,那么它也是3D盒子,但是,该3D盒子的大小将取决于该层的超参数。

和神经网络中的所有其他层一样,卷积层输出的3D盒子的大小由该层的超参数决定。盒子的宽度和高度均等于滤波器大小,深度等于滤波器的数量。

最大池层

最大池层将3D盒子缩小采样(downsample)为更小的新盒子。通常,总是可以在卷积层之后立即放置一个最大池层。上面的那一副图展示了紧接在C1和C3层之后的最大池层。这些最大池层逐渐缩小了穿过它们的3D盒子的大小。这种技术可以避免过拟合。

池化层具有以下超参数:

● 空间范围(f);

● 步长(s)。

与卷积层不同,最大池层不使用填充。此外,最大池层没有权重,因此训练不会影响它们。这些层仅对3D盒子输入进行缩小采样。

最大池层生成的3D盒子的宽度的计算如下公式所示:

最大池层生成的3D盒子的高度的计算与下面公式类似:

最大池层生成的3D盒子的深度,等于输入接收的3D盒子的深度。

最大池层超参数最常见的设置是f = 2和是s = 2。空间范围(f)指定将2×2的盒子缩小为单个像素。在这4个像素中,具有最大值的像素将在新网格中代表2×2的单个像素。由于大小为4的正方形被大小为1的正方形替代,因此丢失了75%的像素信息。下图展示了这种转换,6×6的网格变为3×3的网格。

最大池化(f = 2、s = 2)

当然,上图将每个像素显示为单个数字。灰度图像具有这种特征。对于RGB图像,我们通常取3个数字的平均值,以确定哪个像素具有最大值。

稠密层

LeNet-5神经网络中的最后一个层是稠密层(dense layer)。

该层类型与我们在前馈神经网络中看到的层类型完全相同。稠密层将上一层输出的3D盒子中的每个元素(神经元)连接到稠密层中的每个神经元,对生成的向量使用激活函数。LeNet-5神经网络通常使用ReLU激活函数。我们也可以用S型激活函数,尽管这种技术不太常见。

稠密层通常包含以下超参数:

● 神经元计数;

● 激活函数。

神经元计数指定组成该层的神经元数。激活函数指示要使用的激活函数的类型。

稠密层可以采用许多不同种类的激活函数,如ReLU、S型或双曲正切激活函数。

LeNet-5神经网络通常会包含几个稠密层作为其最终层。

LeNet-5中的最后一个稠密层实际上执行了分类。每个类别或图像类型应有一个输出神经元进行分类。如果神经网络用于区分狗、猫和鸟,就会有3个输出神经元。你可以将一个最终的Softmax函数应用于最终层,将输出神经元视为概率。Softmax允许每个神经元提供图像代表每个类别的概率。由于现在输出的神经元是概率,因此Softmax确保它们的总和为1(100%)。

针对MNIST数据集的卷积神经网络

在以前“反向传播训练”中,我们使用MNIST手写数字作为使用反向传播的示例。在本文中,我们将举一个改进MNIST手写数字识别的例子,建立一个深度卷积神经网络。

卷积神经网络是一种深度神经网络,其层数比咱们以前提到的前馈神经网络要多。

该神经网络的超参数如下:

● 输入:接受[1,96,96]的盒子。

● 卷积层:滤波器= 32,滤波器大小= [3,3]。

● 最大池层:[2,2]。

● 卷积层:滤波器= 64,滤波器大小= [2,2]。

● 最大池层:[2,2]。

● 卷积层:滤波器= 128,滤波器大小= [2,2]。

● 最大池层:[2,2]。

● 稠密层:500个神经元。

● 输出层:30个神经元。

该神经网络使用非常常见的模式,每个卷积层之后跟一个最大池层。

另外,滤波器的数量从输入层到输出层逐渐递增,从而允许在输入视野附近检测到较少数量的基本特征,如边缘、线条和小形状等。连续的卷积层将这些基本特征汇总为更大、更复杂的特征。

最终,稠密层可以将这些高级特征映射到实际15位特征的每个x坐标和y坐标。

训练卷积神经网络需要花费大量时间,尤其当你不使用GPU处理时。

在这个示例中,我们结合使用了Theano与Lasagne。

本文的示例下载可能还会有针对该示例的其他语言版本,具体取决于这些语言的可用框架。在GPU上训练基于Theano的卷积神经网络来进行数字特征识别,所需的时间少于在CPU上训练的时间,因为GPU对卷积神经网络帮助极大。

具体的性能提升根据硬件和平台而有所不同。卷积神经网络和常规ReLU神经网络之间的精确性比较如下:

ReLU:
Best valid loss was 0.068229 at epoch 17.
Incorrect 170/10000 (1.7000000000000002%)
ReLU+Conv:
Best valid loss was 0.065753 at epoch 3.
Incorrect 150/10000 (1.5%)

如果将卷积神经网络的结果与咱们以前提到的标准前馈神经网络进行比较,你会发现卷积神经网络的表现更好。卷积神经网络能够识别数字中的子特征,从而让它的表现超过标准前馈神经网络。当然,这些结果会有所不同,具体取决于所使用的平台。

总之

卷积神经网络是在计算机视觉中应用非常广泛的技术。它们让神经网络能够检测要素的层次结构,如由线条和小形状等简单的特征形成的层次结构,从而教会神经网络识别由更简单的特征组成的复杂模式。深度卷积神经网络会占用相当大的处理能力。一些框架允许使用GPU处理来增强性能。

Yann LeCun推出了最常见的卷积神经网络LeNet-5。这种神经网络由稠密层、卷积层和最大池层组成。稠密层的工作方式与传统前馈神经网络完全相同,最大池层可以对图像进行缩小采样并去除细节,卷积层检测图像视野中任何部分的特征。

为神经网络确定最佳架构的方法有很多。以后咱们还会有更多实践。


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

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

相关文章

ReentrantLock 源码解析

ReentrantLock 源码解析 文章目录 ReentrantLock 源码解析前言一、字段分析二、内部类分析1、Sync2、FairSync3、NonfairSync 三、方法分析1、构造方法2、其他方法 总结 前言 ReentrantLock 实现了 Lock 接口,内部基于 AQS 实现。所以想要弄懂 ReentrantLock &#…

vue 实现左侧导航栏,右侧锚点定位滚动到指定位置(超简单方法)

项目截图: 实现方法: 点击左侧菜单根据元素id定位到可视内容区域。 浏览器原生提供了一种方法scrollIntoView 。 通过scrollIntoView方法可以把元素滚动到可视区域内。 behavior: "smooth"是指定滚动方式为平滑效果。 具体代码如下&#xf…

使用 PhpMyAdmin 安装 LAMP 服务器

使用 PhpMyAdmin 安装 LAMP 服务器非常简单。按照下面所示的步骤,我们将拥有一个完全可运行的 LAMP 服务器(Linux、Apache、MySQL/MariaDB 和 PHP)。 什么是 LAMP 服务器? LAMP 代表 Linux、Apache、MySQL 和 PHP。它们共同提供…

智能化安全防护:AI防火墙的原理与应用

随着人工智能技术的迅猛发展,其在各个领域的应用也日益广泛。作为引领数字化转型的重要力量,AI技术为我们的生活和工作带来了前所未有的便利与效率。在通信领域,人工智能的应用同样展现出了巨大的潜力和价值,特别是在网络安全防护…

HTTP/1.1,HTTP/2.0和HTTP/3.0 各版本协议的详解(2024-04-24)

1、HTTP介绍 HTTP 协议有多个版本,目前广泛使用的是 HTTP/1.1 和 HTTP/2,以及正在逐步推广的 HTTP/3。 HTTP/1.1:支持持久连接,允许多个请求/响应通过同一个 TCP 连接传输,减少了建立和关闭连接的消耗。 HTTP/2&#…

基于PaddlePaddle平台训练物体分类——猫狗分类

学习目标: 在百度的PaddlePaddle平台训练自己需要的模型,以训练一个猫狗分类模型为例 PaddlePaddle平台: 飞桨(PaddlePaddle)是百度开发的深度学习平台,具有动静统一框架、端到端开发套件等特性&#xf…

node.js 解析post请求 方法一

前提:依旧以前面发的node.js服务器动态资源处理代码 具体见 http://t.csdnimg.cn/TSNW9为模板,在这基础上进行修改。与动态资源处理代码不同的是,这次的用户信息我们借用表单来实现。post请求解析来获取和展示用户表单填写信息 1》代码难点&…

【项目实战】基于高并发服务器的搜索引擎

【项目实战】基于高并发服务器的搜索引擎 目录 【项目实战】基于高并发服务器的搜索引擎搜索引擎部分代码index.htmlindex.hpplog.hppparser.cc(用于对网页的html文件切分且存储索引关系)searcher.hpputil.hpphttp_server.cc(用于启动服务器和…

WPForms Pro插件下载:简化您的在线表单构建,提升用户互动

在当今的数字化世界中,表单是网站与用户互动的关键。无论是收集信息、处理订单还是进行调查,一个好的表单可以极大地提升用户体验和转化率。WPForms Pro插件,作为一款专业的WordPress表单构建工具,旨在帮助您轻松创建美观、功能强…

深度学习基础:循环神经网络中的Dropout

深度学习基础:循环神经网络中的Dropout 在深度学习中,过拟合是一个常见的问题,特别是在循环神经网络(RNN)等复杂模型中。为了应对过拟合问题,研究者们提出了许多方法,其中一种被广泛应用的方法…

TensorFlow进阶一(张量的范数、最值、均值、和函数、张量的比较)

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

短视频评论ID批量爬虫提取获客软件|视频评论下载采集工具

短视频评论批量抓取软件:智能拓客,精准抓取用户反馈 主要功能一览 1. 智能抓取任务创建: 软件提供了任务创建功能,用户只需输入任务名称、搜索关键词以及评论监控词,即可开始智能抓取。不仅能够搜索关键词匹配的视频…

Gradio 最快创建Web 界面部署到服务器并演示机器学习模型,本文提供教学案例以及部署方法,避免使用繁琐的django

最近学习hugging face里面的物体检测模型,发现一个方便快捷的工具! Gradio 是通过友好的 Web 界面演示机器学习模型的最快方式,以便任何人都可以在任何地方使用它! 一、核心优势: 使用这个开发这种演示机器学习模型的…

就业班 第三阶段(负载均衡) 2401--4.19 day3

二、企业 keepalived 高可用项目实战 1、Keepalived VRRP 介绍 keepalived是什么keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。 ​ keepalived工作原理keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundan…

前端开发攻略---封装calendar日历组件,实现日期多选。可根据您的需求任意调整,可玩性强。

1、演示 2、简介 1、该日历组件是纯手搓出来的,没依赖任何组件库,因此您可以随意又轻松的改变代码,以实现您的需求。 2、代码清爽干净,逻辑精妙,您可以好好品尝。 3、好戏开场。 3、代码(Vue3写法&#xff…

探索Web3:去中心化的互联网新时代

引言 在过去的几十年里,互联网已经改变了我们的生活方式、商业模式以及社交互动方式。然而,一个新的技术浪潮——Web3正在崭露头角,预示着一个去中心化的互联网新时代的来临。本文将深入探讨Web3技术的定义、特点以及其对未来互联网发展的影…

【数据结构-图】

目录 1 图2 图的定义和基本概念(在简单图范围内)3 图的类型定义4 图的存储结构4.1 邻接矩阵 表示法4.2 邻接表 表示法4.3 十字链表 表示法4.4 邻接多重表 表示法 5 图的遍历5.1 深度优先搜索-DFS 及 广度优先遍历-BFS 6 图的应用6.1 最小生成树6.1.1 克鲁…

vue cli3开发自己的插件发布到npm

具体流程如下: 1、创建一个vue项目 vue create project 2、编写组件 (1)新建一个plugins文件夹(可自行创建) (2)新建Button组件 (3)组件挂载,为组件提供 in…

Python绘制3D曲面图

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 探索Python中绘制3D曲面图的艺术 在数据可视化的世界中,3D曲面图是一种强大的工…

数据链路层(计算机网络,待完善)

0、前言 本文大多数图片都来自于 B站UP主:湖科大教书匠 的教学视频,对高军老师及其团队制作出这么优质的课程表示感谢。文章增加了部分个人理解,内容并不是对视频的静态化翻译。 1、概述 1.1、数据链路层在计算机网络体系中的位置 1.2、对…