【实战项目】BP神经网络识别人脸朝向----MATLAB实现

  • (꒪ꇴ꒪ ),Hello我是祐言QAQ
  • 我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍
  • 快上🚘,一起学习,让我们成为一个强大的攻城狮!
  • 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,请在评论区指正,感谢🙏


一 、必备知识

1.2  BP神经网络简介

        BP(back propagation)神经网络是1986年由Rumelhar和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络模型之一,它是一种多层前向网络,由输入层、输出层、隐含层(可以是一层或多层)构成,一种典型的三层BP神经网络模型如图1所示。反向传播算法的主要思想是把学习过程分为2个阶段:第1阶段(正向传播过程),输入信息从输入层开始逐层计算个单元的实际输出值,每一层神经元的状态只对下一层神经元的状态产生影响;第2阶段(反向传输过程),若在输出层未能够得到期望的输出值,则逐层递归计算实际输出与期望输出之间的差值,根据此误差修正前层权值使误差信号趋向最小。它通过连续不断地在相对于误差函数斜率下降的方向上计算网络权值和偏差变化而逐渐逼近目标。每次权值和误差的变化都与网络误差的影响成正比。

图1 经典三层BP网络模型图

1.2  实验要求

        利用BP神经网络的理论知识,对图像中人脸朝向判别进行实验研究。实验采用Matlab工具箱进行BP网络设计,实现对人脸角度方向的判别,讨论输入和目标向量设计BP神经网络结构的设计,以及网络参数和训练参数的设定等问题。最终实现BP神经网络可以根据输入图像的二值化等信息,对于给出的人脸图像中的人脸是朝向左、左前、前、右前或右进行识别。

二、实验原理

2.1  基本原理

人工神经网络无需事先确定输入输出之间映射关系的数学方程,仅通过自身的训练,学习某种规则,在给定输入值时得到最接近期望输出值的结果。作为一种智能信息处理系统,人工神经网络实现其功能的核心是算法。BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。

        基本BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。

        接下来详细了解下信号的前向传播过程以及误差的反向传播过程:

2.1  BP网络的特点

        BP网络总括起来,具有以下主要优点:

1)只要有足够多的隐含层和隐节点,BP网络可以逼近任意的非线性映射关系;

2BP网络的学习算法属于全局逼近的方法,因而它具有较好的泛化能力。

        它的主要缺点是:

1)收敛速度慢;

2)局部极值;

3)难以确定隐含层和隐节点的个数。

        从原理上,只要有足够多的隐含层和隐节点,即可实现复杂的映射关系,但是如何根据特定的问题来具体确定网络的结构尚无很好的方法,仍需要凭借经验和试凑。

        BP网络能够实现输入/输出的非线性映射关系,但它并不依赖于模型。其输入与输出之间的关联信息分散地存储于连接权中。由于连接权的个数很多,个别神经元的损坏只对输入/输出关系有较小的影响,因此BP网络显示了较好的容错性。

三、实验结果

4.1  训练过程

4.2  测试结果

        测试结果:

四、实验总结

        通过本次实验我们更加深入的学习到BP神经网络的理论知识,掌握BP神经网络的算法原理以及如何在MATLAB中实现利用MATLAB完成BP神经网络实现人脸朝向分类的程序编写,这也使得我们掌握了在MATLAB中实现一些小型程序的编写能力,实验中我们不妨有一些知识是在课本上没有学习到的,因此我们在实验初期查阅了很多关于BP神经网络的资料,以及如何在MATLAB中实现BP神经网络的代码,当然我们也遇到了一些问题,比如,设置参数问题中,到底是运行越多越好呢还是达到目的就好,也做了很多查阅和讨论。

        更多C/C++语言Linux系统数据结构ARM板实战相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            系统、网络编程

                                     探索C++

                                             6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉🎉🎉感谢关注🎉🎉🎉

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

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

相关文章

Javascript中null、NaN、undefined区别(JS空值、Javascript空值)(?.链操作符)

文章目录 概述null的本质undefined的两面性系统层面的undefined开发者层面的undefined NaN的特殊性数值运算的异常标识NaN的独特比较行为 深入比较类型比较相等性比较 实践建议变量初始化错误检测属性检查(链操作符) 性能考虑 概述 JavaScript中的null、…

Java 运行时常量池笔记(详细版

📚 Java 运行时常量池笔记(详细版) Java 的运行时常量池(Runtime Constant Pool)是 JVM 方法区的一部分,用于存储编译期生成的字面量和符号引用。它是 Java 类文件常量池的运行时表示,具有动态…

STM32 HAL库USART串口中断编程:演示数据丢失

目录 一、开发环境 二、配置STM32CubeMX 三、代码实现与部署 四、运行结果: ​五、注意事项 上面讨论过,HAL_UART_Receive最容易丢数据了,可以考虑用中断来实现,但是HAL_UART_Receive_IT还不能直接用,容易数据丢失,实际工作中不会这样用,本文介绍STM32F103 HAL库函数…

Javascript网页设计案例:通过PDF.js实现一款PDF阅读器,包括预览、页面旋转、页面切换、放大缩小、黑夜模式等功能

前言 目前功能包括: 切换到首页。切换到尾页。上一页。下一页。添加标签。标签管理页面旋转页面随意拖动双击后还原位置 其实按照自己的预期来说,有很多功能还没有开发完,配色也没有全都搞完,先发出来吧,后期有需要…

缺陷检测之图片标注工具--labme

一、labelme简介 Labelme是开源的图像标注工具,常用做检测,分割和分类任务的图像标注。 它的功能很多,包括: 对图像进行多边形,矩形,圆形,多段线,线段,点形式的标注&a…

Kafka集群,常见MQ面试问题

Kafka 名词介绍 Topic: 消息队列,生产者和消费者面向的都是一个TopicBroker: 一个Kafka服务器就是一个Broker,一个集群由多个Broker组成。一个Broker可以容纳多个TopicProducer: 消息生产者,向Kafka Broker发生消息的客户端Consumer: 消息消…

Unity DeepSeek API 聊天接入教程(0基础教学)

Unity DeepSeek API 聊天接入教程(0基础教学) 1.DeepSeek 介绍 DeepSeek是杭州深度求索人工智能基础技术研究有限公司推出的一款大语言模型。2025年1月20日,DeepSeek-R1正式上线,和当前市面上的主流AI相比,它在仅有极少标注数据的情况下&am…

DeepSeek-R1 蒸馏 Qwen 和 Llama 架构 企业级RAG知识库

“DeepSeek-R1的输出,蒸馏了6个小模型”意思是利用DeepSeek-R1这个大模型的输出结果,通过知识蒸馏技术训练出6个参数规模较小的模型,以下是具体解释: - **知识蒸馏技术原理**:知识蒸馏是一种模型压缩技术,核…

el-input无法输入0.0001的小数,自动转换为0在vue3中的bug

今天遇到个bug&#xff0c;el-input中只能输入0.1或者输入0.1再加上00成为0.001&#xff0c;不能直接输入0.001&#xff0c;否则自动转换为0。需要去掉 v-model.number后面的 .number 源代码&#xff1a; <el-table-column label"实发数量" width"120"…

Spring事务原理 一

Spring事务管理有 声明式事务 和 编程式事务 两种方式&#xff0c;实现对数据库操作的ACID控制。其核心思想是将事务管理与业务逻辑解耦&#xff0c;开发者通过简单注解或配置即可管理复杂事务。 开启Spring事务&#xff0c;本质上就是在Spring容器中增加了一个Advisor&#x…

一周学会Flask3 Python Web开发-Debug模式开启

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 默认情况&#xff0c;项目开发是普通模式&#xff0c;也就是你修改了代码&#xff0c;必须重启项目&#xff0c;新代码才生效&…

使用EasyExcel和多线程实现高效数据导出

​ 使用EasyExcel和多线程实现高效数据导出 1. 概述 在企业级应用中&#xff0c;数据导出是一个常见的需求。为了提高导出效率&#xff0c;尤其是在处理大量数据时&#xff0c;我们可以结合使用EasyExcel库和多线程技术。本文将详细介绍如何通过EasyExcel和多线程技术实现高…

[qt5学习笔记]Application Example示例程序源码解析

开发环境问题 vs2022下直接打开ui、ts文件失败 解决办法如下图&#xff0c; 设置designer独立运行。估计是嵌入运行存在些许bug。 同理&#xff0c;ts编辑工具linguist也存在这个问题。 qrc rc的编辑嵌入编辑都正常&#xff0c;但分离式更稳定可靠。 qt creator编译失败 原…

Jetson Agx Orin平台JP6.0-r36.3版本修复了vi模式下的原始图像损坏(线条伪影)

1.问题描述 这是JP-6.0 GA/ l4t-r36.3.0的一个已知问题 通过vi模式捕获的图像会导致异常线条 参考下面的快照来演示这些线伪影 这个问题只能通过VI模式进行修复,不应该通过LibArgus看到。 此外,这是由于内存问题。 由于upstream已经将属性名称更改为“dma-noncoherent”…

[创业之路-299]:图解金融体系结构

一、金融体系结构 1.1 概述 金融体系结构是一个国家以行政的、法律的形式和运用经济规律确定的金融系统结构&#xff0c;以及构成这个系统的各种类型的银行和非银行金融机构的职能作用和相互关系。以下是对金融体系结构的详细分析&#xff1a; 1、金融体系的构成要素 现代金…

0基础学LabVIEW

对于零基础的朋友来说&#xff0c;学习LabVIEW需要一个科学的学习路径和方法。通过观看优质的B站教程打好基础&#xff0c;再结合实际项目进行实践操作&#xff0c;能够快速提升LabVIEW的应用能力。以下是从入门到进阶的学习建议。 ​ 一、利用B站入门教程打基础 筛选优质教程…

Query String 传递 json 对象参数、map参数

?params[name]John&params[age]30&params[isStudent]true params[name] 和 params[age] 中的 [] 是非法字符。 服务器&#xff08;Apache Tomcat&#xff09;默认不允许在 URL 中使用 []。 对 [] 进行 URL 编码 将 [] 编码为 %5B 和 %5D。 示例&#xff1a; ?pa…

腿足机器人之六- 前向运动学

腿足机器人之六- 前向运动学 刚体运动学基础坐标系定义旋转矩阵与欧拉角齐次变换矩阵&#xff08;平移旋转的统一表示&#xff09; 运动链建模串联运动链结构&#xff08;从基座到末端的关节连接&#xff09;标准Denavit-Hartenberg&#xff08;D-H&#xff09;参数法改进D-H参…

正则表达式(Regular expresssion)

正则表达式 匹配单次 . &#xff1a;匹配任意一个字符 [ ] &#xff1a;匹配[ ]里举例的任意一个字符 /d &#xff1a;匹配数字0-9 /D &#xff1a;匹配非数字 /s &#xff1a;匹配空白或tab建 /S &#xff1a;匹配非空白 /w &#xff1a;…

DarkLabel 2.4使用指南:高效标注视频数据目标检测标签

工具概述 DarkLabel 2.4 是一款强大的多功能标注工具&#xff0c;专为计算机视觉开发者设计&#xff0c;旨在提升标注工作的效率和精确度。其智能标注引擎支持两项核心功能&#xff1a;线性插值标注与多目标跟踪&#xff0c;极大地优化了视频标注过程。 &#xff08;1&#x…