asp.net网站开发实例教程临沂网站建设 百度优化

news/2025/10/7 14:20:17/文章来源:
asp.net网站开发实例教程,临沂网站建设 百度优化,怎么做跳转网站首页,广东新闻联播主持人BP神经网络指传统的人工神经网络#xff0c;相比于卷积神经网络(CNN)来说要简单些。 人工神经网络具有复杂模式和进行联想、推理记忆的功能, 它是解决某些传统方法所无法解决的问题的有力工具。目前, 它日益受到重视, 同时其他学科的发展, 为其提供了更大的机会。1986 年, Rom…BP神经网络指传统的人工神经网络相比于卷积神经网络(CNN)来说要简单些。 人工神经网络具有复杂模式和进行联想、推理记忆的功能, 它是解决某些传统方法所无法解决的问题的有力工具。目前, 它日益受到重视, 同时其他学科的发展, 为其提供了更大的机会。1986 年, Romelhart 和Mcclelland提出了误差反向传播算法(Error Back Propagation Algorithm) 简称BP 算法由于多层前馈网络的训练经常采用误差反向传播算法, 人们也把多层前馈网络称为BP 网络。 为了便于阅读下面说一下全文的逻辑顺序 1通俗说下神经网络的结构和工作原理简单好理解推荐观看 2逆向传播算法的数学推导如果觉得太复杂可以暂时跳过 3matlab代码和图像库   1 大白话讲解传统神经网络 首先我们看一下神经网络的基本单元——单个的神经元 图中圆形表示一个神经元我们知道一个神经元接收相邻的神经元传来的刺激神经元对这些刺激以不同的权重进行积累到一定的时候产生自己的刺激将其传递给一些与它相邻的神经元。这样工作的无数个神经元便构成了人脑对外界的感知。而人脑对世界的学习的机制就是通过调节这些相邻连接的神经元刺激的权重。 在图中周围神经元传过来的刺激表示为Y权重表示为W圆形表示的神经元得到的刺激是所有刺激按照权重累加起来即 同时这个神经元作为网络的一份子也像其他神经元一样需要向外传播刺激信号但是不是直接把s传播而是传播一个f(s)出去为什么呢其实无关大局我们后面分析。其中f(s)学名称为“激活函数”常用的函数如下 好了理解到这里如果没什么问题的话恭喜你你已经入门了现在我们把这一个个的基本单元连接起来就构成我们最终的神经网络了。传统的神经网络结构如下图所示 是不是觉得很乱不着急我们一点一点看由整体到细微来解剖它。首先整体上它的结构分为三部分输入层隐藏层和输出层一般输入层和输出层各一个隐藏层若干个图中画出了一个。细微处连接结构上后一层的每个神经元都由前一层的所有神经元连接进来。 手写数字识别实验使用的是三层的神经网络结构即只有一个隐藏层下面以此说明。 下面说明一下各层的表示和各层的关系 输入层X(x1,x2,x3…xn) 隐藏层Y(y1,y2,y3…ym) 输出层O(o1,o2,o3…or) 两个权重 输入层到隐藏层的权重V(V1,V2,V3…Vm)Vj是一个列向量表示输入层所有神经元通过Vj加权得到隐藏层的第j个神经元 隐藏层到输出层的权重W(W1,W2,W3…Wr)Wk是一个列向量表示隐藏层的所有神经元通过Wk加权得到输出层的第k个神经元 根据我们上面说到的单个神经元的刺激传入和刺激传出相信到这里很多人应该已经得出下面的各层之间的关系了 到这里神经网络的工作过程就清楚一些了。实例说明一下假设输入是一张图像 16x16大小转换为一个二维的灰度值矩阵再把每一行拼接在上一行的末尾拼接成一个1x256的行向量作为输入层的输入即X接下来按照公式2就可以计算出隐藏层然后根据公式1又可以计算出输出层输出层的输出就得到了。在这个手写数字识别的项目中我使用的图片输入正是16x16所以输入层有256个神经元隐藏层的神经元我取了64个最后的输出层神经元我取的是10个为什么是10个呢因为数字0到9一共10个期望上是比如输入一张写着数字1的图像在输出端得到的输出是{1 0 0 0 0 0 0 0 0 0}输入的图像为2时输出{ 0 1 0 0 0 0 0 0 0 0}以此类推实际上输出的未必就是刚好1和刚好0经过调参和训练基本是输出0.9多和正负的0.0多不过也足够了仅仅用判断最大值所在位置的方式就可以识别到图像上的数字。 至此我们已经了解了整个网络的结构和正向工作的具体流程。可以说我们已经对神经网络理解了有50%了。为什么才50%呢仔细想想相信你会发现我们还不知道两个在网络中很重要的量就是权重矩阵W和V。 如何求得W和V呢这里要用到一种算法就是误差反向传播算法(Error Back Propagation Algorithm) 简称BP 算法。说的很晦涩我们来翻译成人话。先来看看算法的工作过程首先随机地初始化W和V的值然后代入一些图片进行计算得到一个输出当然由于W和V参数不会刚好很完美输出自然不会是像上文说的刚好就是{1 0 0 0 0 0 0 0 0 0}这一类所以存在误差根据这个误差就可以反过来修正W和V的值修正后的W和V可以使输出更加的靠近于理想的输出这就是所谓的“误差反向传播”的意思修正一次之后再代入其他一些图片输出离理想输出又靠近了一点我们又继续计算误差然后修正W和V的值就这样经过很多次的迭代计算最终多次修正得到了比较完美的W和V矩阵它可以使得输出非常靠近于理想的输出至此我们的工作完成度才是100%了。这种在输出端计算误差根据误差来作调节的思想学自动化的或者接触过飞思卡尔一类的智能车比赛的同学体会应该是比较深的跟PID自控算法有很大相似性。 下面是数学推导关于实际输出和理想输出之间的误差如何具体来调节W和V的值调节多少的问题。上面说过了暂时不理解的话可以先跳过推导看最后的结论就好自己最后跟着代码实践一遍有了更深的体会慢慢会理解的。   2逆向传播算法的数学推导 输出层的理想输出d(d1,d2,d3…dr)例如{1 0 0 0 0 0 0 0 0 0}和{0 1 0 0 0 0 0 0 0 0}等 假设实际输出和理想输出之间的差距是E明显W是一个关于输入X权重W和V输出O的函数。要修正W则需要知道具体的修正增量ΔW离散情况下表征微分增量可以得到 这样改变η的大小即可改变每一次调节的幅度η大的话调节更快小则调节慢但是过大容易导致振荡这一点也跟PID中的比例系数P是一样的。一般η的大小需要经过多次尝试来找到合适值。 好了到这里神经网络就讲解完毕下面是一个较次要的内容我们上面说了通过不断迭代来调整权重W和V那么如何衡量迭代是否可以停止了呢。一个自然的想法是判断每次的输出和理想输出是否足够接近所以我们可以用算向量距离的方法跟均方差是一个 道理如下 这样主要s足够小迭代就可以结束了。 3实践 下面是我试验用的MATLAB代码。 训练部分recognize_handwriting_numbers_by_simple_NN_train.m Vdouble(rand(256,64)); Wdouble(rand(64,10)); delta_Vdouble(rand(256,64)); delta_Wdouble(rand(64,10));yita0.2;%缩放系数有的文章称学习率 yita10.05;%我自己加的参数缩放激活函数的自变量防止输入过大进入函数的饱和区可以去掉体会一下变化 train_number9;%训练样本中有多少个数字一共9个没有0 train_num30;%训练样本中每种数字多少张图一共100张 xdouble(zeros(1,256));%输入层 ydouble(zeros(1,64));%中间层也是隐藏层 outputdouble(zeros(1,10));%输出层 tar_outputdouble(zeros(1,10));%目标输出即理想输出 deltadouble(zeros(1,10));%一个中间变量可以不管%记录总的均方差便于画图 s_record1:1000; tic %计时 for train_control_num1:1000 %训练次数控制在调参的最后发现1000次其实有多了大概400次完全够了s0; %读图输入网络 for number1:train_number ReadDir[E:\Matlab\recognize_handwiting_numbers\train_lib\];%读取样本的路径 for num1:train_num %控制多少张 photo_name[num2str(number),num2str(num,%05d),.png];%图片名 photo_index[ReadDir,photo_name];%路径加图片名得到总的图片索引 photo_matriximread(photo_index);%使用imread得到图像矩阵 photo_matrixuint8(photo_matrix230);%二值化黑色是1 tmpphoto_matrix; tmptmp(:);%以上两步完成了图像二维矩阵转变为列向量256维作为输入 %计算输入层输入 xdouble(tmp);%转化为行向量因为输入层X是行向量并且化为浮点数 %得到隐层输入 y0x*V; %激活 y1./(1exp(-y0*yita1)); %得到输出层输入 output0y*W; output1./(1exp(-output0*yita1)); %计算预期输出 tar_outputdouble(zeros(1,10)); tar_output(number)1.0; %计算误差 %按照公式计算W和V的调整为了避免使用for循环比较耗费时间下面采用了直接矩阵乘法更高效 delta(tar_output-output).*output.*(1-output); delta_Wyita*repmat(y,1,10).*repmat(delta,64,1); tmpsum((W.*repmat(delta,64,1))); tmptmp.*y.*(1-y); delta_Vyita*repmat(x,1,64).*repmat(tmp,256,1); %计算均方差 sssum((tar_output-output).*(tar_output-output))/10; %更新权值 WWdelta_W; VVdelta_V; end end ss/train_number/train_num %不加分号随时输出误差观看收敛情况 train_control_num %不加分号随时输出迭代次数观看运行状态 s_record(train_control_num)s;%记录 end toc %计时结束 plot(1:1000,s_record);测试部分recognize_handwriting_numbers_by_simple_NN_test.m correct_num0;%记录正确的数量 incorrect_num0;%记录错误数量 test_number9;%测试集中一共多少数字9个没有0 test_num100;%测试集中每个数字多少个最大100个 % load W;%%之前训练得到的W保存了可以直接加载进来 % load V; % load yita1;%记录时间 tic %计时开始 for number1:test_number ReadDir[E:\Matlab\recognize_handwiting_numbers\test_lib\]; for num1:test_num %控制多少张 photo_name[num2str(number),num2str(num,%05d),.png]; photo_index[ReadDir,photo_name]; photo_matriximread(photo_index); %大小改变 photo_matriximresize(photo_matrix,[16 16]); %二值化 photo_matrixuint8(photo_matrix230);%黑色是1 %行向量 tmpphoto_matrix; tmptmp(:); %计算输入层输入 xdouble(tmp); %得到隐层输入 y0x*V; %激活 y1./(1exp(-y0*yita1)); %得到输出层输入 o0y*W; o1./(1exp(-o0*yita1)); %最大的输出即是识别到的数字 [o,index]sort(o); if index(10)numbercorrect_numcorrect_num1 elseincorrect_numincorrect_num1;%显示不成功的数字显示会比较花时间 % figure(incorrect_num) % imshow((1-photo_matrix)*255); % title(num2str(number)); end end end correct_ratecorrect_num/test_number/test_num toc %计时结束使用的库来自于http://www.ee.surrey.ac.uk/CVSSP/demos/chars74k/#download 使用其中的EnglishFnt.tgz库从其中的数字选出前100张作为训练再另外取100张作为测试。图片集有需要也可以邮件我发送。 运行结果 最后调参得到比较好的结果使用η0.2η10.05在我电脑上i5-3210M4G内存迭代1000次所需要的时间是468s最终得到下面的曲线横坐标是训练的迭代次数纵坐标是均方差可以看到其实在350次迭代的时候已经取得了很小的均方差考虑时间和性能的折中的话迭代350次已经可以了。 最后训练结束使用η0.2η10.05用测试集测试可以得到89.11%的准确率继续调节参数曾经可以得到90.56%的准确率不过也难再上去估计瓶颈了。 如果你跟着本文的步骤一步一步下来最后还自己动手打一遍代码应该会很好的理解了传统类型的神经网络对接下来理解卷积神经网络应该会有些帮助。   个人对神经网络的的一些理解 以识别图片手写数字为例图片中黑色像素点和白色像素点之间的空间编排关系构成了我们看到的数字如果我们能找到一个很厉害的方程组方程的输入参数是一张图片返回一个数字表示识别结果那肯定是很理想的但是可惜很难找到的方程来映射图片像素点的空间排布和识别结果这样的一种关系。而神经网络刚好就完成了这样的映射功能所有的关于像素点空间排布信息的解析都隐藏于矩阵W和V之中所以W和V实际上代表了这样一种映射关系。而神经网络聪明的地方在于当这样的映射关系未知时我们设计了一套机理让它自己来寻找这就是学习和训练的过程而最后得到的W和V就是学习的结果这个过程很像婴儿开始认东西的过程一开始婴儿的认知体系是空白的像刚随机初始化的W和V我们给它看一本书像给了网络一个输入告诉他这个是“书”像告诉网络理想输出应该是“书”他会开始尝试来理解建立书这个物品到“书”这个字的映射关系一开始他会犯错看到相似的比如一张纸也会认为是书但是在看到更多的书之后并且我们告诉他这个是“书”之后他又会不断修正这样一种映射关系最后建立完整的对于书这样一种物品到“书”这个字的映射过程初步的认知体系建立。现在可以说说上面的“激活函数”是干嘛用的了可以想象自然界的各种各样的映射关系显然是比较复杂的关靠线性关系是无力描述的而神经网络中用的是加权相加的运算如果没有经过激活函数处理后层的所有输入都可以由多层之前的信号经过线性运算来得到一个现象模型显然表现力是远远不够的所以我们在神经网络模型中加入了非线性的因素就是激活函数。 // 转载https://blog.csdn.net/huang_miao_xin/article/details/51364152

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

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

相关文章

长春网站建设硕成传媒app制作开发小程序制作开发

​  域名解析是互联网用户接收他们正在寻找的域的地址的过程。更准确地说,域名解析是人们在浏览器中输入时使用的域名与网站IP地址之间的转换过程。您需要站点的 IP 地址才能知道它所在的位置并加载它。但,在这个过程中,可能会出现多种因素…

网站傻瓜式建设品牌维护

文章目录 1. Socket简介2. ServerSocket3. Socket4. 服务器端代码5. 客户端代码 1. Socket简介 Socket(Java套接字)是Java编程语言提供的一组类和接口,用于实现网络通信。它基于Socket编程接口,提供了一种简单而强大的方式来实现…

外贸网站怎么做效果好平面设计公司怎么找客户

1.1 概述 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。习惯优于配置 1.2 为什么使用Spring Boot J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。 1.3 Spring Bo…

深入解析:SpringBatch+Mysql+hanlp简版智能搜索

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Cisco vManage漏洞分析:未授权RCE与权限提升完整攻击链

本文详细分析了Cisco vManage中四个关键漏洞的组合利用链,包括SSRF+任意文件写入、未授权文件读取、命令注入和SUID权限提升,最终实现未授权root权限远程代码执行,影响企业SD-WAN基础设施安全。SD-PWN — 第3部分 —…

ps做游戏下载网站seo人员培训

本文由简码编程原创,保留所有版权,转载请注明出处。 本python人工智能爬虫系列教程基于Python3.0版本, 将python结合windows桌面开发工具aardio一起做可视化的开发, 用python做逻辑处理,用aardio做窗口界面, 不用再看着黑黑的python命令行窗口, 有window…

爱建站吧软文广告推广

对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!访问FTP,无非两件事情:upload和download,最近在项目中需要从ftp下载大量文件,然后我就试着去实验自己的ftp操作类&…

铁总建设函网站怎么做招投标网站

看了很多教程,花了1天半的时间装上了,记录下。 前置条件:我安装了VS2015,用来编译工程。 参考资料 官方:http://www.vtk.org/Wiki/VTK/Building 安装:http://blog.csdn.net/Chinamming/article/details/1…

硅芯片创新如何成为云计算成功的关键

本文深入探讨了某中心通过自研芯片技术推动云计算发展的历程,包括Nitro系统、Graviton处理器及机器学习专用芯片的创新,揭示了硅芯片在提升性能、降低功耗方面的核心技术突破。硅芯片创新如何成为云计算成功的关键 某…

东萍象棋 DhtmlXQ UBB 转 中国象棋云库查询 FEN

<html><meta charset="utf-8"> <title>ubb2fen</title> <style> button { font-size:18pt; width:5em } #ta { outline:none } </style> <body> <p><bu…

【开源工具】基于PyQt5工作时长计算器工具开发全解析 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

十六、【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言安装

十六、【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言安装2025-10-07 14:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x…

斑马ZT210碳带及纸张安装教程

1、碳带安装方法说明图:2、纸张安装说明图:3、综合图:4、实物图:

石家庄网站搭建定制vi设计获奖作品

一.概述 1.1 以太网指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带总线局域网规范&#xff0c;是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD技术。 1.2 以太网在局域网各种技术中占统治性地位。 造价低;是应用最广泛的局域网技术。比令…

DHCP及DNS

dhcp enable //开启dncp ip pool xxx //创建一个叫xxx的地址池 network xxx.xxx mask yyy.yyy//设置地址池的相关参数 gateway-list zzz.zzz//设置地址池的网关 dns-list ddd.ddd//设置地址池的DNS huawei路由器还…

Gitlab Runner 学习

Gitlab Runner 学习 runner下载|安装|启动 下载 # 为您的系统下载二进制文件 sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runne…

代做备案网站专业郑州企业网站建设

文章目录 1. 简介2. 用法1&#xff09;单个 CommandLineRunner2&#xff09;多个 CommandLineRunner 3. 优点4. 缺点总结 CommandLineRunner 是 Spring Boot 提供的一个接口&#xff0c;用于在 Spring Boot 应用程序启动后执行一些任务。通过实现 CommandLineRunner 接口&#…

东莞网站建设设计公司网站怎么添加域名

Redisson 中的 RScoredSortedSet 类是对 Redis 内置的 Sorted Set 数据结构的一个封装&#xff0c;它支持对集合中的元素进行排序&#xff0c;每个元素都有一个与之关联的分数(score)。 RScoredSortedSet 可以用于多种场景&#xff0c;以下是一些常见的使用案例&#xff1a; 排…

AI元人文:论价值原语博弈与人文知识库共建如何重塑智能社会的决策基石

AI元人文:论价值原语博弈与人文知识库共建如何重塑智能社会的决策基石 我们这个时代面临着深刻的人文困境。表面上是技术冲击与规则失能,实则是规则逻辑与人文逻辑的断裂。规则逻辑构筑现代社会的效率骨架,人文逻辑…