当前位置: 首页 > news >正文

matlab实现神经网络检测手写数字

一、要求

1.计算sigmoid函数的梯度;

2.随机初始化网络权重;

3.编写网络的代价函数。

二、算法介绍

神经网络结构:

不正则化的神经网络的代价函数:

正则化:

S型函数求导:

反向传播算法:

step1:初始化 ,然后使用前向传播算法计算

step2:计算第三层的误差

step3:对于第二层 

step4:使用公式 累积这个例子的所有的梯度!注意你需要跳过或者移除

step5:通过将之前累积的梯度除以m得到没有正则化的神经网络代价函数的梯度;

三、过程记录

1.可视化数据集

导入数据集后,通过displayData函数将数据集显示出来,由于数据集数据较大,随机选取100个数据点进行显示,结果如下:

图1 显示数据集

2.模型表示

构造的神经网络包含输入层,隐含层,输出层,由于图像大小为20×20,所以设定输入层大小为400,设定隐藏层大小为25,标签一共10个。

3.前馈与成本函数

将标签重新编码为只包含0和1的向量,在标签向量y中找到标签号对应的位置,在将新的向量中放入处理后的值,处理的要求是将一维标签号i改为十维向量,其中第i个位置为1其余为0,如3处理后为[0 0 1 0 0 0 0 0 0 0]

接下来再正则化成本函数

导入θ1和θ2的参数集,θ1不参与正则化,对相应参数进行处理然后通过公式计算得出

当lambda设定为0时,结果如下:

图2 lambda=0代价值

Lambda为1时:

图3 lambda=1代价值

4.反向传播

该部分需要用到sigmoid函数,在之前实验已经成功编写,通过如下语句可以在sigmoidGradient中实现对sigmoid函数梯度的计算:

给出示例进行测试:

结果如下:

图4 验证sigmoid梯度函数

接下来初始化θ的权重,通过随机选取[-0.12 0.12]范围内的值以确保参数保持较小使学习有效,初始化函数randInitializeWeights中代码如下:

完成后进行调用:

然后完成正则化反向传播算法,通过循环对不同示例进行处理,每一次需要完成四个步骤:将输入层的值设置为第t个训练示例、对于输出层每个单元k进行处理、对于隐藏层进行设置、累计梯度。最后将累计梯度除以示例的个数m得到神经网络的代价函数梯度。

完成上述之后通过checkNNGradients函数检查梯度,该函数将创造一个小的神经网络和数据集进行测试,结果如下:

图5 梯度检查结果

从图中可以看出左右两边梯度值非常相似,最终计算出来的相对差异也小于1e-9,说明梯度计算正确。

5.使用函数fmincg来优化学习参数

设置最大迭代次数为50次,lambda=1,通过fmincg函数训练迭代寻找得到最佳的参数θ

训练部分过程如下:

图6 训练过程

可以看出代价值在不断减小,寻找最佳的状态

6.预测并计算准确率

通过predict函数实现预测的功能,其中代码如下:

将θ1和θ2以及预测样本传入函数中得到p即为预测值,再与训练集真实值进行比较得到准确率如下:

图7 训练集准确率

7.可视化隐藏层

为了理解神经网络在学习什么,通过displayData函数将其可视化:

结果如下:

图8 可视化隐藏层

图中一共有25个单元,每个单元对应网络中的一个隐藏单元。

8.修改参数进一步实验

为了更深入地了解神经网络的性能如何随正则化参数λ和训练步骤数而变化的,对程序中的参数进行修改并观察结果:

图9 λ=0.5

图10 λ=0.01

图11 λ=10

图12 λ=100

图13 迭代次数为100

图14 迭代次数为500

四、结果分析

    通过上述实验分析可知,实验中构造的反向传播神经网络能够较为准确的识别出数据集中的手写数字。在实验过程中由成本函数和梯度等一些计算中以及优化参数的过程中,正则化参数和迭代次数的设定对实验的结果有一定的影响,通过进一步探究发现,正则化参数值减小,训练集精度会有一定的增大如图9与图10,而若正则化参数增大则训练集精度可能会减小如图11和图12所示。可知,正则化可以防止过拟合,正则化参数太小容易产生过拟合,太大容易产生欠拟合,在无法增加样本数量或增加样本数量的成本过高时,正则化是一种行之有效的方法。又由于优化参数的过程是一个迭代寻优的过程,成本函数的值会不断降低,迭代次数增大后训练集精度有显著上升,如图13和图14所示。

相关文章:

matlab实现神经网络检测手写数字

一、要求 1.计算sigmoid函数的梯度; 2.随机初始化网络权重; 3.编写网络的代价函数。 二、算法介绍 神经网络结构: 不正则化的神经网络的代价函数: 正则化: S型函数求导: 反向传播算法&…...

增强现实与虚拟现实中的大模型应用:沉浸式体验的创新

增强现实与虚拟现实中的大模型应用:沉浸式体验的创新 1. 背景介绍 随着技术的进步,增强现实(AR)和虚拟现实(VR)正在成为越来越受欢迎的沉浸式体验方式。大模型,如神经网络和深度学习模型&…...

【数据分析案列】--- 北京某平台二手房可视化数据分析

一、引言 本案列基于北京某平台的二手房数据,通过数据可视化的方式对二手房市场进行分析。通过对获取的数据进行清冼(至关重要),对房屋价格、面积、有无电梯等因素的可视化展示,我们可以深入了解北京二手房市场的特点…...

【Golang星辰图】创造美丽图表,洞察数据:解析Go语言中的数据可视化和数据分析库

解锁数据的力量:深入研究Go语言中的数据可视化和数据分析库 前言 本文将介绍Go语言中几个优秀的数据可视化和数据分析库,以帮助开发者更好地处理和分析数据。这些库提供了丰富的功能和工具,可用于创建漂亮的可视化图表、进行数值计算和数据…...

阿里云原生:如何熟悉一个系统

原文地址:https://mp.weixin.qq.com/s/J8eK-qRMkmHEQZ_dVts9aQ?poc_tokenHMA-_mWjfcDmGVW6hXX1xEDDvuJPE3pL9-8uSlyY 导读:本文总结了熟悉系统主要分三部分:业务学习、技术学习、实战。每部分会梳理一些在学习过程中需要解答的问题,这些问题…...

Scala第十一章节(正则表达式和异常处理)

4. 正则表达式 4.1 概述 所谓的正则表达式指的是正确的,符合特定规则的式子, 它是一门独立的语言, 并且能被兼容到绝大多数的编程语言中。在scala中, 可以很方便地使用正则表达式来匹配数据。具体如下: Scala中提供了Regex类来定义正则表达式.要构造一个Regex对象&#xff0…...

Flutter运行MacOs网络请求报错Unhandled Exception: DioException [connection error]:...

报错信息 [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DioException [connection error]: The connection errored: Connection failed This indicates an error which most likely cannot be solved by the library. Error: SocketException: …...

基于SpringBoot+MyBatis框架的智慧生活商城系统的设计与实现(源码+LW+部署+讲解)

目录 前言 需求分析 可行性分析 技术实现 后端框架:Spring Boot 持久层框架:MyBatis 前端框架:Vue.js 数据库:MySQL 功能介绍 前台功能拓展 商品详情单管理 个人中心 秒杀活动 推荐系统 评论与评分系统 后台功能拓…...

Godot 学习笔记(5):彻底的项目工程化,解决GodotProjectDir is null

文章目录 前言GodotProjectDir is null解决方法解决警告问题根本解决代码问题测试引用其实其它库的输出路径无所谓。 总结 前言 Godot 项目工程化上有一朵乌云,我看Godot的Visual Studio 项目的时候,发现如果是手动新建项目导入Godot包,会导…...

Openharmony

OpenHarmony 是一个开源的、多设备分布式操作系统,由开放原子开源基金会(OpenAtom Foundation)孵化及运营。它旨在提供跨多种设备的统一开发体验,支持一次开发,多端部署。OpenHarmony 的系统架构遵循分层设计原则&…...

24计算机考研调剂 | 华南师范大学

华南师范大学接收调剂研究生 考研调剂招生信息 学校:华南师范大学 专业:- 年级:2024 招生人数:- 招生状态:正在招生中 联系方式:********* (为保护个人隐私,联系方式仅限APP查看) 补充内容 课题组主要研究生物拉曼光谱技术、基于荧光的微生物快检技术、显微成像设备与相…...

【Node.js】全局变量和全局 API

node 环境中没有 dom 和 bom ,此外 es 基本上都是可以正常使用的。 如果一定要使用 dom 和bom,可以借助第三方库 jsdom 帮助我们实现操作。npm i jsdom 实例: const fs require(node:fs) const {JSDOM} require(jsdom)const dom new JS…...

Install Docker

Docker Desktop 直接安装 Docker Desktop Docker Desktop includes the Docker daemon (dockerd), the Docker client (docker), Docker Compose, Docker Content Trust, Kubernetes, and Credential Helper. Linux下安装Docker CE 参考官方文档 参见阿里云的文档 # step 1…...

Orbit 使用指南 10|在机器人上安装传感器 | Isaac Sim | Omniverse

如是我闻: 资产类(asset classes)允许我们创建和模拟机器人,而传感器 (sensors) 则帮助我们获取关于环境的信息,获取不同的本体感知和外界感知信息。例如,摄像头传感器可用于获取环境的视觉信息&#xff0c…...

GPT系列模型的特点

GPT系列模型(包括GPT-1、GPT-2和GPT-3)都基于自回归机制的Transformer架构。在设计上,这些模型的核心思想是利用Transformer架构来捕捉整个序列的上下文信息,通过其独特的自回归机制逐步地整合整个序列的完整语义。GPT系列模型的设…...

Oracle Data Guard常用命令

--查询数据库角色和保护模式 select database_role,switchover_status from v$database; --切换备库为主库(切换后,主库为mount状态) --TO PRIMARY alter database commit to switchover to primary; --SESSIONS ACTIVE alter database comm…...

IM系统设计之websocket消息转发

Websocket消息转发 项目地址:gitgithub.com:muyixiaoxi/Link.git 上周面试被面试官问到:“在分布式IM系统中,如何实现多个websocket集群之间的通信”。 我在思考了良久后回答:“不会”。 随着我的回答,我和面试官的…...

关于vue 的生命周期的教程

Vue.js 是一款流行的前端框架,它提供了丰富的功能和便捷的开发式, 其中生命周期函数是 Vue 组件中非常重要的一部分。 本文将为您详细介绍 Vue 组件的生命周期函数及其执行顺序, 帮助您更好地理解和利用 Vue.js 框架。 什么是 Vue 生命周期 …...

STM32 CAN的工作模式

STM32 CAN的工作模式 正常模式 正常模式下就是一个正常的CAN节点,可以向总线发送数据和接收数据。 静默模式 静默模式下,它自己的输出端的逻辑0数据会直接传输到它自己的输入端,逻辑1可以被发送到总线,所以它不能向总线发送显性…...

Java中的常用类之Math类

Java中的Math类 一、Math类是什么?二、主要方法1.随机数2.绝对值3.向上取值4.向下取值5.四舍五入6.两个值中取大/小的 总结 一、Math类是什么? Math类是Java常用类的一种,主要方法针对于数学方面的运算,类中的所有方法都是static…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...