pre-processing预处理
什么是神经网络?
神经网络是由很多神经元组成的,首先我们看一下,什么是神经元
1、我们把输入信号看成你在matlab中需要输入的数据,输进去神经网络后
2、这些数据的每一个都会被乘个数,即权值w,然后这些东东与阀值b相加后求和得到u,
3、上面只是线性变化,为了达到能处理非线性的目的,u做了个变换,变换的规则和传输函数有关
可能还有人问,那么那个阀值是什么呢?简单理解就是让这些数据做了个平移,这就是神经元工作的过程。处理后的结果又作为输入,可输给别的神经元,很多这样的神经元,就组成了网络。在matlab中具体用什么算法实现这些,我们先不管,我们需要注意的是怎么使用。比如使用BP的神经网络newff()构建一个网络,这些在后面的学习将提到。
BP网络的特点
①网络实质上实现了一个从输入到输出的映射功能,而数学理论已证明它具有实现任何复杂非线性映射的功能。这使得它特别适合于求解内部机制复杂的问题。我们无需建立模型,或了解其内部过程,只需输入,获得输出。只要BPNN结构优秀,一般20个输入函数以下的问题都能在50000次的学习以内收敛到最低误差附近。而且理论上,一个三层的神经网络,能够以任意精度逼近给定的函数,这是非常诱人的期望;
②网络能通过学习带正确答案的实例集自动提取“合理的”求解规则,即具有自学习能力;
③网络具有一定的推广、概括能力。
bp主要应用
回归预测(可以进行拟合,数据处理分析,事物预测,控制等)、 分类识别(进行类型划分,模式识别等),在后面的学习中,我都将给出实例程序。
但无论那种网络,什么方法,解决问题的精确度都无法打到100%的,但并不影响其使用,因为现实中很多复杂的问题,精确的解释是毫无意义的,有意义的解析必定会损失精度。
BP注意问题
1、BP算法的学习速度很慢,其原因主要有:
a 由于BP算法本质上为梯度下降法,而它所要优化的目标函数又非常复杂,因此,必然会出现“锯齿形现象”,这使得BP算法低效;
b 存在麻痹现象,由于优化的目标函数很复杂,它必然会在神经元输出接近0或1的情况下,出现一些平坦区,在这些区域内,权值误差改变很小,使训练过程几乎停顿;
c 为了使网络执行BP算法,不能用传统的一维搜索法求每次迭代的步长,而必须把步长的更新规则预先赋予网络,这种方法将引起算法低效。
2、网络训练失败的可能性较大,其原因有:
a 从数学角度看,BP算法为一种局部搜索的优化方法,但它要解决的问题为求解复杂非线性函数的全局极值,因此,算法很有可能陷入局部极值,使训练失败;
b 网络的逼近、推广能力同学习样本的典型性密切相关,而从问题中选取典型样本实例组成训练集是一个很困难的问题。
3、网络结构的选择:
尚无一种统一而完整的理论指导,一般只能由经验选定。为此,有人称神经网络的结构选择为一种艺术。而网络的结构直接影响网络的逼近能力及推广性质。因此,应用中如何选择合适的网络结构是一个重要的问题。
4、新加入的样本要影响已学习成功的网络,而且刻画每个输入样本的特征的数目也必须相同。
5、采用s型激活函数,由于输出层各神经元的理想输出值只能接近于1或0,而不能打到1或0,因此设置各训练样本的期望输出分量Tkp时,不能设置为1或0,设置0.9或0.1较为适宜。
你所说的应该是输入数据的预处理 即pre-processing,你使用ST Nueral Networks的话,里面有自动的预处理,你输入定性数据(nominal variable)后,软件可以自动预处理后转化为神经网络可以识别的数值.或者你自己设置
例1 根据年鉴记载的某些地区经度,纬度与台风类型的关系预测任意经纬度下台风类型(台风A或者台风B),
台风类型就属于定性数据在STNN中你可以现将输出变量设置为nominal variable,然后设置输出变量的数目为2,分别是V1和V2,构建网络的时候经纬度对应台风A的,设置输出值为V1,为台风B的设置为V2,预测时,网络可以给出结果V1或者V2,你就知道是哪种台风了.
例2 根据现有的水质标准以及数种污染物的采样值预测该河流的水质级别
输出值为水质级别,同样为nominal variable,你可以将输出值作一个标准化处理,设总共有五个水质级别,你可以将输出变量区间化分为0-0.2,0.2-0.4,0.4-0.6,0.6-0.8,0.8-1,设置第一级别水质对应的输出值为0.2 第2级水质对应0.4,等等,第5级水质对应1。
训练BP神经网络的一些经验
讲一下自己训练神经网络的一点经验:
- 学习速率不宜设置过大,一般小于0.1,开始我设置了0.85,准确率一直提不上去,很明显是陷入了局部最优解;
- 输入数据应该归一化,开始使用0-255的灰度值测试,效果不好,转成01二值后,效果提升显著;
- 尽量是数据记录随机分布,不要将数据集按记录排序,假设数据集有10个类别,我们把数据集按类别排序,一条一条记录地训练神经网络,训练到后面,模型将只记得最近训练的类别而忘记了之前训练的类别;
- 对于多分类问题,比如汉字识别问题,常用汉字就有7000多个,也就是说有7000个类别,如果我们将输出层设置为7000个结点,那计算量将非常大,并且参数过多而不容易收敛,这时候我们应该对类别进行编码,7000个汉字只需要13个二进制位即可表示,因此我们的输出成只需要设置13个结点即可。
pre-processing预处理的更多相关文章
- SpringCloud或SpringBoot+Mybatis-Plus利用mybatis插件实现数据操作记录及更新对比
引文 本文主要介绍如何使用mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:mybatis插件(拦截器). ...
- SpringCloud或SpringBoot+Mybatis-Plus利用AOP+mybatis插件实现数据操作记录及更新对比
引文 本文主要介绍如何使用Spring AOP + mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:AO ...
- myBatis源码解析-配置文件解析(6)
前言 本来打算此次写一篇关于SqlSession的解析,但发现SqlSession涉及的知识太多.所以先结合mybatis配置文件(我们项目中常写的如mybatisConfig.xml),来分析下my ...
- Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解
封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...
- MyBatis文档
MyBatis 学习笔记 简介 什么是Mybatis MyBatis 是一款优秀的持久层框架,是Apache的一个Java开源项目 ,它支持自定义 SQL.存储过程以及高级映射, 免除了几乎所有的 J ...
- [译]初识.NET Core & ASP.NET Core
原文:点这 本文的源代码在此: ASP.NET From Scratch Sample on GitHub 你过你是.NET Core的入门者,你可以先看看下面这篇文章: ASP.NET and .N ...
- tomcat下的https项目创建与部署
1.1 生成keystore文件及导出证书 步奏1:打开控制台,运行: %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (如果你已经 ...
- Android AudioPolicyService服务启动过程
AudioPolicyService是策略的制定者,比如什么时候打开音频接口设备.某种Stream类型的音频对应什么设备等等.而AudioFlinger则是策略的执行者,例如具体如何与音频设备通信,如 ...
- 自制基于HMM的中文分词器
不像英文那样单词之间有空格作为天然的分界线, 中文词语之间没有明显界限.必须采用一些方法将中文语句划分为单词序列才能进一步处理, 这一划分步骤即是所谓的中文分词. 主流中文分词方法包括基于规则的分词, ...
- Windows 环境下进行的jenkins持续集成
一台服务器作为代码仓库,一条服务器做持续集成代码仓库目前常见的github.gitlab.gitee持续集成常用Jenkins 服务器的配置这边都以Windows为例进行介绍 1. 安装Jenkins ...
随机推荐
- Python函数式编程中map()、reduce()和filter()函数的用法
Python中map().reduce()和filter()三个函数均是应用于序列的内置函数,分别对序列进行遍历.递归计算以及过滤操作.这三个内置函数在实际使用过程中常常和“行内函数”lambda函数 ...
- Notes of Daily Scrum Meeting(11.19)
Notes of Daily Scrum Meeting(11.19) 现在工程项目进入尾声了,我们的项目中还有一些问题需要解决,调试修改起来进度比较慢,所以昨天就没有贴出项目 进度,今天的团队工作总 ...
- php与nginx之间的通信
Nginx是俄国人最早开发的Webserver,现在已经风靡全球,相信大家并不陌生.PHP也通过二十多年的发展来到了7系列版本,更加关注性能.这对搭档在最近这些年,叱咤风云,基本上LNMP成了当下的标 ...
- C#中周,月,第几周,周开始结束时间de方法总结
1.c#获取当前时间是本年的第几周,本月的第几周 private static int getWeekNumInMonth(DateTime daytime) { int dayInMonth = d ...
- 重温servlet①
Servlet是单例的,是线程不安全的.比较灵活,但是容易会使两个线程产生错误 类由我们自己来写,对象由服务器生成,方法由服务器自己调用. 一个servletconfig对象对应着一段web.xm ...
- 结对项目-四则运算出题程序(GUI版)
目录: 一.致搭档(含项目地址) 二.PSP(planning) 三.结对编程中对接口的设计 四.计算模块接口的设计与实现过程 五.计算模块接口部分的性能改进 六.计算模块部分单元测试展示 七.计算模 ...
- thinkphp学习2-控制器
1.定义控制器 一般来说,ThinkPHP的控制器是一个类,而操作则是控制器类的一个公共方法. 控制器通常需要继承系统的Controller类或者其子类,例如,下面定义了一个 \Home\Contro ...
- ASP.NET MVC 3.0 参考源码索引
http://www.projky.com/asp.netmvc/3.0/Microsoft/Internal/Web/Utils/CommonResources.cs.htmlhttp://www. ...
- 复利计算测试(C语言)
对我们和复利计算程序,写单元测试. 有哪些场景? 期待的返回值 写测试程序. 运行测试. 测试模块 测试输入 预期结果 运行结果 bug跟踪 计算终值 (本金,年限,利率) 终值 1 (100 ...
- 基于Freemarker的eclipse plugin代码生成器插件开发
固定类型的软件写多了,里面总是有一些复制粘贴改变类名改变量的基础文件,相似程度非常高.作为一名程序员,坚持不多写一行重复代码的精神,写了一个Eclipse的代码生成器插件.插件通过在xml文件中配置的 ...