matlab 神经网络一直训练不好。
作者&投稿:相会 (若有异议请与网页底部的电邮联系)
它不过是个结构体,你在当前变量那个框框里找到它->右击->保存为.mat,下次用的时候点load再加载回来就成了(以上操作亦可用 save load 命令在代码里实现),不行的话直保存net的参数,下回用的时候在拿出来赋给新建的net。
你用的是matlab的神经网络工具箱吧。那是因为权值和阈值每次都是随机初始化的,所以结果就会不一样,
你可以把随机种子固定,即在代码前面加上setdemorandstream(pi); 这样每次训练出来的结果都是一样的了。
看来楼主是刚开始学习神经网络的,推荐一些资料给楼主:
神经网络之家 (专讲神经网络的网站,有视频下载)
matlab中文论坛的神经网络专区
数学中国的神经网络专区
较好的书:
MATLAB神经网络原理与实例精解
神经网络30个案例分析
都是干货,其他的就不说了,祝楼主学习愉快。
mapminmax按行逐行地对数据进行标准化处理,将每一行数据分别标准化到区间[ymin, ymax]内,其计算公式是:y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin。如果某行的数据全部相同,此时xmax=xmin,除数为0,则Matlab内部将此变换变为y = ymin。
(1) [Y,PS] = mapminmax(X,YMIN,YMAX)——将数据X归一化到区间[YMIN,YMAX]内,YMIN和YMAX为调用mapminmax函数时设置的参数,如果不设置这两个参数,这默认归一化到区间[-1, 1]内。标准化处理后的数据为Y,PS为记录标准化映射的结构体。
【例1】Matlab命令窗口输入:X=12+8*randn(6,8); [Y,PS] = mapminmax(X,0,1),则将随机数矩阵X按行逐行标准化到区间[0,1]内,并返回标准矩阵Y和结构体PS(至于它的作用,将在后面介绍到),它记录了X的行数、X中各行的最大值与最小值等信息。这里:
PS =
name: 'mapminmax'
xrows: 6
xmax: [6x1 double]
xmin: [6x1 double]
xrange: [6x1 double]
yrows: 6
ymax: 1
ymin: 0
yrange: 1
no_change: 0
gain: [6x1 double]
xoffset: [6x1 double]
(2) [Y,PS] = mapminmax(X,FP) ——将YMIN和YMAX组成的结构体FP作为映射参数(FP.ymin和FP.ymax.)对进行标准化处理。
【例2】Matlab命令窗口输入:XX=12+8*randn(6,8); FP.ymin=-2; FP.ymax=2; [YY,PSS] = mapminmax(XX,FP),则将随机数矩阵X按行逐行标准化到区间[-2,2]内,并返回标准矩阵YY和结构体PSS。
(3) Y = mapminmax('apply',X,PS) ——根据已有给定的数据标准化处理映射PS,将给定的数据X标准化为Y。
【例3】在例1的基础上,Matlab命令窗口输入:XXX=23+11*randn(6,8); YYY= mapminmax('apply',XXX,PS),则根据例1的标准化映射,将XXX标准化(结果可能不全在先前设置的[YMIN,YMAX]内,这取决于XXX中数据相对于X中数据的最大值与最小值的比较情况)。注意:此时,XXX的行数必须与X的行数(PS中已记录)相等,否则无法进行;列数可不等。
(4) X = mapminmax('reverse',Y,PS) ——根据已有给定的数据标准化处理映射PS,将给定的标准化数据Y反标准化。
【例4】在例1的基础上,Matlab命令窗口输入:YYYY=rand(6,8); XXXX = mapminmax('reverse', YYYY,PS),则根据例1的标准化映射,将YYYY反标准化。注意:此时,YYYY的行数必须与X的行数(PS中已记录)相等,否则无法进行;列数可不等。
(5) dx_dy = mapminmax('dx_dy',X,Y,PS) ——根据给定的矩阵X、标准化矩阵Y及映射PS,获取逆向导数(reverse derivative)。如果给定的X和Y是m行n列的矩阵,那么其结果dx_dy是一个1×n结构体数组,其每个元素又是一个m×n的对角矩阵。这种用法不常用,这里不再举例。
对于另一个问题:使用sim函数来得到输出,一般来说会有误差,不可能与预计输出完全相等的。
有以下几种归一化方法(x、y分别为原数据、归一化后的值):
1、线性函数转换,表达式如下:
y=(x-MinValue)/(MaxValue-MinValue)
说明:MaxValue、MinValue分别为训练样本的最大值和最小值。
2、对数函数转换,表达式如下:
y=log10(x)
说明:以10为底的对数函数转换。
3、反余切函数转换,表达式如下:
y=atan(x)*2/PI
伏欢右旋: 归一化:使用Matlab自带的mapminmax函数.mapminmax按行逐行地对数据进行标准化处理,将每一行数据分别标准化到区间[ymin, ymax]内,其计算公式是:y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin.如果某行的数据全部相同,此时xmax=...
河北区17078367875: 用MATLAB中神经网络工具箱固有函数建立的BP网络,训练精度始终达不到,而且误差也大,该如何解决 - ?
伏欢右旋: 除了楼上的方法,还可以修改下神经网络的初始权值,这方面的方法很多,可以改变下初始参数的取值范围,或者用遗传算法搜索下.另外,改变神经网络的训练函数是十分有效的,比如trainscg什么的,还有好几个记不得了,自己找找看!
河北区17078367875: matlab bp神经网络,误差设为0.001,可是训练了3万多次,一直达不到,网络的误差停留在0.0017,这是为什么? - ?
伏欢右旋: 显然是你的BP神经网络训练样本有些少,导致你的建模效果不好,你把训练样本扩大,看看效果怎么样
河北区17078367875: MATLAB BP神经网络训练 - ?
伏欢右旋: 你的程序训练完毕后根本就没达到目标误差,就是说训练效果不好,不能进行预测,只有训练结果好了才能预测仿真,你再改一下隐含层神经元数或者训练和传递函数试试吧~ 另外输入层的值可以归一化也可以不归一化,归一化后在仿真之前要反归一化.
河北区17078367875: matlab神经网络工具箱的网络训练问题 - ?
伏欢右旋: 楼主,首先,我不是高手 其次,你的T中间的00最好分开写,还有threshold中的01(如果是要分开的话) 再次,newff中的,我改成了这样net=newff(threshold,[5,5],{'tansig','logsig'},'traingdx');单引号要切换成英文输入后打进去 最后,我的可以运行了
河北区17078367875: 运用matlab神经网路工具箱进行训练时,出现下列问题,是哪里出错了,怎么办,急求 - ?
伏欢右旋: 神经网络训练出来的是权值矩阵我想你是想在matlab外用训练好的神经网络首先你要在外部实现神经网络算法之后你把神经网络训练出来的权值矩阵读取到你在外部实现的神经网络算法中然后你就可以使用这个神经网络了
河北区17078367875: 用matlab做神经网络迭代时,每次迭代到400多就卡住了,迭代不了 - ?
伏欢右旋: 从现实结果看,在这一步迭代后,计算Performance相对权重的梯度时,出现了无穷大,导致没法修改权重了
河北区17078367875: 用MATLAB做bp神经网络的预测,训练的挺好.但是预测误差很大,是什么原因,怎么解决啊 - ?
伏欢右旋: 可能两个原因:1.可能是输入变量选择的问题,输入变量不能完全反应对象的特性.2.训练样本不够
河北区17078367875: 如何用matlab训练BP神经网络? - ?
伏欢右旋: net = newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF) newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF) takes, PR - Rx2 matrix of min and max values for R input elements. Si - Size of ith layer, for Nl layers. TFi - Transfer function of ith ...
河北区17078367875: 你的那个matlab神经网络的问题怎么解决的,我还是有问题这个 - ?
伏欢右旋: 有什么问题,请具体描述. 神经网络可以指向两种,一个是生物神经网络,一个是人工神经网络.生物神经网络:一般指生物的大脑神经元,细胞,触点等组成的网络,用于产生生物的意识,帮助生物进行思考和行动.人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型.这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的.