【机器学习】——续上:卷积神经网络(CNN)与参数训练
目录
引入
一、CNN基本结构
1、卷积层
2、下采样层
3、全连接层
二、CNN参数训练
总结
引入
卷积神经网络(CNN)是一种有监督深度模型框架,尤其适合处理二维数据问题,如行人检测、人脸识别、信号处理等领域,是带有卷积结构的深度神经网络,也是首个真正意义上成功训练多层网络的算法。CNN与传统的神经网络的主要区别在于权值共享与非全连接。权值共享能够避免算法过拟合,通过拓补结构建立层与层间非全连接空间关系来降低训练参数的数目,这也是卷积神经网络的基本思想。
CNN经过反馈训练学习多个能够提取输入数据特征的卷积核,这些卷积核与输入数据进行逐层卷积并池化,来逐级提取隐藏在数据中拓补结构的特征。随着网络结构层层深入,提取的特征也逐渐变得抽象,最终获得输入数据的平移、旋转及缩放不变性的特征表示。相比传统神经网络,CNN将特征提取与分类过程同时进行,避免了两者在算法匹配上的难点。
一、CNN基本结构
CNN主要由卷积层与下采样层
交替重复出现来构建网络结构,卷积层用来提取输入神经元数据的局部特征,不但可以增强特征信息,还会降低图像中的噪声;下采样层用来对其上一层提取的数据进行缩放映射以减小训练数据量,同时也使得提取的特征具有一定的缩放不变性。一般来说,可选不同尺寸的卷积核来提取多尺度特征,获得不同大小的局部信息。
例如,用于图像识别的CNN基本框架如图所示,两层卷积、两层下采样、一层全连接,然后输出分类:
1、卷积层
对图像和滤波矩阵做内积(逐个元素相乘再求和)即为卷积。图像即一个数据窗口,滤波矩阵可理解成权重层/卷积核,如下图:
上图卷积核为3x3,所以做卷积后9个数变为1个数,每计算完一个数据窗口内的局部数据后,数据窗口不断平移滑动,直到计算完所有数据,涉及几个参数:①深度depth:神经元的个数,决定输出的depth厚度,也代表滤波器的个数;②步长stride:滑动多少步可到边缘,如3x3的卷积核一次滑移2步;③填充值zero-pading:在外围补充多少圈0,方便从初始位置以步长为单位可以刚好滑移到末尾位置——总长可以被步长整除。
滑移时数距窗口的数据一直在变化,每次滤波器(卷积核)都是对某一局部的数据窗口(一个特征图)进行卷积,这就是所谓的CNN的局部感知机制;但是权重值没变,这就是CNN的参数(权重)共享机制。
输入图像与可学习的核进行卷积操作,经过激活函数得到C1的特征图,卷积层的计算公式如下:
其中,表示第
层的特征图的第k个,
表示获得第k个特征图的所有被卷积的输入图像,
表示对应滤波核的可学习参数,
代表卷积操作,
表示
层的第n个特征图,第
表示第
层的第n个输入图像所对应的加权偏置,S(·)是卷积层的激励函数。
由上式,C1特征图由多个输入图卷积累加获得,但对于同一幅输入图其卷积核参数是一致的,这也是权值共享的意义。卷积核的初值不是随机设置,是通过无监督的预先训练或按照一定标准给定,如仿照生物视觉特征用Gabor滤波器进行预处理。此处的卷积操作是针对图像的二维离散卷积操作,步骤主要是:先将卷积核模板旋转180°,然后再将卷积核中心平移到所求像素点处,进行卷积操作(对应像素相乘并累加),得到图像上该像素点的卷积值。
2、下采样层
下采样也可称为池化,池化是指特征图分别在高、长方向上缩小运算,以增强模型的鲁棒性(当输入数据发生微小偏差时,结果仍然是相同的——即下采样层通过降低网络空间分辨率来增强缩放不变性,计算公式如下:
其中,表示可训练的标量参数,其值随下采样方法的不同而变化,常用下采样方法有大值下采样、均值下采样(或称最大池化、平均池化),前者更适合提取图像纹理,后者能很好地保存图像背景。例如均值采样
,表示对m x m像素块进行下采样(常用大小是2 x 2),如此输出图像每个维度均为原图的
,每个输出图均有一个加权偏置
,然后将输出结果输入到一个非线性函数(如Sigmoid函数)。
假设一个4x4的特征图,池化窗口kenerl size为2,池化步长为2,则最大池化方法结果如下:(平均池化顾名思义,每个框取平均值)
下采样的优势:①降维,减少网络要学习的参数数量;②防止过拟合,增强模型对一般情况的适应性;③增大感知野;④可以实现不变性:平移不变性、旋转不变性、尺度不变性。
劣势在于下采样过程会丢失大量的特征信息,但是这些信息可以通过一些特有手段在一定程度上弥补。
3、全连接层
相邻层的所有神经元都有连接,称为全连接(fully connected),全连接层在整个CNN中起到分类器的作用。全连接层常出现在最后几层,一般用Affine层实现,该层每个神经元与前一层的所用神经元进行全连接,用来把前面提取的特征综合起来——即对前面设计的特征做加权和。由于全相连的特性,其参数也是最多的,为了提升CNN网络性能,全连接层的激活函数一般用到ReLU函数:
上图的全连接神经网络中,Affine层后跟着激活函数ReLU层(或Sigmoid层),上图堆叠了4层Affine-ReLU组合,然后第5层是Affine层,最后又Softmax层输出最终结果(一个概率)。注意这里的例子只有第5层Affine+Softmax是上面讨论的全连接输出层。前面的网络层可根据需要选择是否全连接(CNN输出层一般采用线性全连接层,目前最常用的分类方法有逻辑回归、Softmax分类方法。)
作用:全连接层主要用于线性映射,将输入数据从低维空间映射到高维空间,也可以加入非线性激活函数实现非线性映射。如果说卷积层、池化层和激活函数等操作是将原始数据映射到隐层特征空间的话,全连接层则起到了将学到的“分布式特征表示”映射到样本标记空间的作用——把前面局部特征重新通过权值矩阵组装成完整的图。
举例:如图一开始是9x9的图像经过一系列卷积、池化、激活函数操作后,即将进入到全连接层(红框):
到了全连接层时,全连接层是一维数据,所以要将feature map变为一维。①假设在到达全连接层时是3个2x2的矩阵,此时这12x1向量中的每一个元素就是输入层的一个神经元;②然后得到的一维向量输入到网络中以概率(Softmax)的方式判断是X还是非X,粗线表示特征明显的数据,即是X还是非X;③根据计算得到的权重矩阵,对其进行加权求和,就得到了每个分类得分,然后根据Softmax函数进行概率计算,得到X的概率为0.92,不是X的概率为0.5:
逻辑回归和Softmax分类方法下次单独出一期博客!卷积分权值和偏置bias两部分也会进一步探讨!归一化也会进一步学习!
二、CNN参数训练
CNN参数训练过程与传统的人工神经网络类似,采用BP反向传播算法,包括前向传播与反向传播两个阶段,假设共有N个训练样本,分为C类,误差函数如下:
其中,是第n个样式的第k维的网络输出值,
为对应的期望值,误差函数
为两者方差的累积。参数训练过程一般采用SGD算法,但是优化算法LBFGS在卷积神经网络参数优化中较SGD算法效果有明显提高。
卷积神经网络实际应用中会有很多问题,如网络参数如何预学习,收敛条件以及非全连接规则等,均需要实际应用中进一步解决与优化。这里介绍一种Boosting_like CNN算法,假设对输入样本加一个惩罚权值,则第
层的输入
与上一层的输出
存在如下线性关系:
其中,为输出层的权值,
为偏置,训练过程中不断调整。
为上一层的输出即本层的输入。
为输出层的激励函数,一般为sigmoid或双曲正切函数,通过求导得到输出层的灵敏度为:
误差对权值
的导数如下:
最后,对每个神经元运用更新法进行权值更新:
为学习率,由此可以获得权值
的更新方法。
CNN可以看作多个特征提取器串联,每一个特征提取器,提取的特征由低级别到高级别,并且特征提取结果相互制约——一个特征提取器的分类结果不仅和前一层有关系,还受到后一层反馈的制约。假设CNN有n个阶段,则用n个不同阶段的输出训练分类器,可以得到n个弱分类器,所以使用Boosting算法在训练过程中不断调节样本权重分布,以此来给不同网络层次结构提供更好的分类情况的反馈信息,进而提高网络性能使得网络更加稳定——......具体可参考相关论文!!
总结
此总结内容包括上次的神经网络与深度学习博客!
深度学习是自动学习分类所需的低层次或高层次特征算法,例如机器视觉,深度学习算法从原始图像去学习得到它的低层次表达(例如边缘),之后在低层次表达的基础上,通过线性或非线性的组合在建立高层次的表达。
深度学习能更好地表示数据特征。由于模型层次、参数很多,因此模型有能力处理大规模数据,对于图像、语音这种特征不明显的问题,能通过大规模数据训练取得很好效果。
此外,深度学习框架将特征提取和分类整合在一个框架,用数据去学习特征,减少了手工设计特征的巨大工作量,效果好还使用方便!!
相关文章:
【机器学习】——续上:卷积神经网络(CNN)与参数训练
目录 引入 一、CNN基本结构 1、卷积层 2、下采样层 3、全连接层 二、CNN参数训练 总结 引入 卷积神经网络(CNN)是一种有监督深度模型框架,尤其适合处理二维数据问题,如行人检测、人脸识别、信号处理等领域,是带…...

鲸鱼算法WOA优化VMD参数,最小包络熵、样本熵、信息熵、排列熵(适应度函数可自行选择,一键修改)包含MATLAB源代码...
鲸鱼优化算法(Whale optimization algorithm, WOA)是Mirjalili根据座头鲸的捕食行为而提出来的,算法对座头鲸的狩猎行为进行模仿,通过对猎物的寻找,然后攻击进行觅食,以此来达到优化的目的,已有很多学者将算法用于实际…...

ELK日志收集系统集群实验
ELK日志收集系统集群实验 目录 一、实验拓扑 二、环境配置 三、 安装node1与node2节点的elasticsearch 1. 安装 2.配置 3.启动elasticsearch服务 4.查看节点信息 四、在node1安装elasticsearch-head插件 1.安装node 2.拷贝命令 3.安装elasticsearch-head 4.修改el…...

用Python写了一个下载网站所有内容的软件,可见即可下
目录标题 前言效果展示环境介绍:代码实战获取数据获取视频采集弹幕采集评论 GUI部分尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 今天我们分享一个用Python写下载视频弹幕评论的代码。 顺便把这些写成GUI,把这些功能放到一起让朋友用起来更方便~ 效果…...
gin使用embed打包html
embed 使用类似的注释打包html文件 //go:embed pages/dist/* 打包的代码如下 package mainimport ("embed""io/fs""net/http""github.com/gin-gonic/gin" )//go:embed pages/dist/* var embedFs embed.FSfunc main() {e : gin.Defau…...

Android启动优化实践
作者:95分技术 启动优化是Android优化老生常谈的问题了。众所周知,android的启动是指用户从点击 icon 到看到首帧可交互的流程。 而启动流程 粗略的可以分为以下几个阶段 fork创建出一个新的进程创建初始化Application类、创建四大组件等 走Applicatio…...

ROS:通信机制实操
目录 ROS:通信机制一、话题发布实操1.1需求1.2分析1.3实现流程1.4实现代码1.4.1C版1.4.2Python版 1.5执行 二、话题订阅实操2.1需求2.2分析2.3流程2.4实现代码2.4.1启动无辜GUI与键盘控制节点2.4.2C版 ROS:通信机制 一、话题发布实操 1.1需求 编码实现…...

C/C++内存管理(内存分布、动态内存分配、动态内存分配与释放、内存泄漏等)
喵~ 内存之5大区(栈区、堆区、静态区、常量区、代码区)C/C中各自的内存分配操作符内存泄露?内存泄漏检测方法 内存之5大区(栈区、堆区、静态区、常量区、代码区) 1、栈区(stack):由编译器自动分…...

【云原生】软件架构的演进以及各个架构的优缺点
文章目录 1. 什么是软件架构?2. 单机架构3. 应用数据分离架构4. 应用服务集群架构5. 读写分离架构6. 冷热分离架构7.垂直分库架构8. 微服务架构9. 容器编排架构10. 小结 1. 什么是软件架构? 软件架构是指在设计和构建软件系统时,对系统的组织结构、组件、模块、接…...
力扣刷题笔记——二叉树
首先定义二叉树节点的结构体 struct TreeNode{TreeNode* left;TreeNode* right;int val;TreeNode():val(0),left(nullptr),right(nullptr){}TreeNode(int val):val(val),left(nullptr),right(nullptr){}TreeNode(int val,TreeNode* l,TreeNode* R):val(val),left(l),right(R){…...
【华为OD机试】工号不够用了怎么办?(python, java, c++, js)
工号不够用了怎么办? 前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:nansun0903@163.com;备注:CSDN。 题目…...
【leetcode】198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非…...

【react全家桶学习】react的 (新/旧) 生命周期(重点)
目录 生命周期(旧) 挂载时的生命周期 constructor(props) componentWillMount()-------------新生命周期已替换 render() componentDidMount()--- 组件…...
Gradio私网和公网的使用
Gradio私网问题 如果部署的服务器只有私有地址,那么无法直接从外部网络中的其他计算机访问该服务器和其中运行的 Gradio 应用程序。在这种情况下,你可以考虑使用端口转发技术,将服务器的私有地址映射到一定的公开地址上,从而可以…...

ant design vue 配置菜单外部打开
实现如下 菜单配置 前端项目地址:http://localhost:3000 菜单路径:dataCenter/HealthData 打开方式:外部 在项目中src-->config-->router.config.js文件 将需要再外部打开的菜单地址进行如下配置 菜单地址:/dataCenter/Hea…...

YOLOv5/v7 添加注意力机制,30多种模块分析⑦,CCN模块,GAMAttention模块
目录 一、注意力机制介绍1、什么是注意力机制?2、注意力机制的分类3、注意力机制的核心 二、CCN模块1、CCN模块的原理2、实验结果3、应用示例 三、GAMAttention模块1、GAMAttention模块的原理2、实验结果3、应用示例 大家好,我是哪吒。 🏆本…...

IDEA下Logback.xml自动提示功能配置
首先打开logback的配置文件,在configuration标签中加入xsd的配置 <configuration xmlns"http://ch.qos.logback/xml/ns/logback"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://ch.qos.logback/xml…...
CUDA编程模型系列八(原子操作 / 规约 / 向量元素求和)
本系列视频目的是帮助开发者们一步步地学会利用CUDA编程模型加速GPU应用, 我们的口号是: 让GPU飞起来 本期我介绍了cuda 当中规约算法的一种情况, 也是小何尚职业生涯中的第一道面试题, 计算数组中所有元素的和. CUDA编程模型系列八(原子操作 / 规约 / 向量元素求和) #include…...
go语言系列基础教程总结(4)
1、goroutine和channel 每执行一次go func()就创建一个 goroutine,包含要执行的函数和上下文信息。 goroutine 是Go程序并发的执行体,channel是它们之间的沟通连接通道。 var ch1 chan int. //声明一个整型的通道 2、channel 常用操作 //定义一个…...

网络基础一:网络协议初识与网络传输基本流程
目录 网络协议认识“协议”网络协议初识协议分层OSI七层模型(理论模型)TCP/IP五层(或四层)模型(工程实现模型) 网络中的地址管理MAC地址IP地址 网络传输基本流程路由的本质 数据包封装和分用网络协议需要解决的问题 网络协议 计算…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...