求助神经网络MATLAB程序

求助神经网络MATLAB程序,第1张

你用的工具箱函数了吗?用工具箱函数可以简单点,工具箱调用是nntool;在command

windows使用,先用import,将数据分别放入

inputs和targets(导入数据)。然后按NEW

NETWORK选择结构,选择Feedforward

Backprop,确定Number

of

Layers(网络层数),在下面确定每层节点数,然后选择下函数:logsig

,purelin,tansig。最后,关闭此窗口。单击View,即可显示结构。

然后按train,在

inputs和targets里面填入输入值X和训练的Y,在training

parameters中设置你要的参数,比如误差。最后按train就可以开始训练。完了一定记住按网络模型输出(Export),将模型转入command

windows。下面调用:如y1=sim(network1,x0)plot(x,y,'o',x0,y0,y1,':')。

如果你要程序,可以这样:

function

BP

x=[-1:0.01:1]

y=[-1:0.01:1]

p=[xy]

T=x.^2+y.^2

x0=[-1:0.1:1]

y0=[-1:0.1:1]

p0=[x0y0]

T0=x0.^2+y0.^2

net=newff(minmax(p),[10,1],{'logsig','purelin'})

net.trainParam.epochs=10000

net.trainParam.goal=1e-6

net=train(net,p,T)

figure

T1=sim(net,p0)

plot(p,T,'o',p0,T0,p0,T1,':')

end

这样:

clear

%输入数据矩阵

p1=zeros(1,1000)

p2=zeros(1,1000)

%填充数据

for i=1:1000

p1(i)=rand

p2(i)=rand

end

%输入层有两个,样本数为1000

p=[p1p2]

%目标(输出)数据矩阵,待拟合的关系为简单的三角函数

t = cos(pi*p1)+sin(pi*p2)

%对训练集中的输入数据矩阵和目标数据矩阵进行归一化处理

[pn, inputStr] = mapminmax(p)

[tn, outputStr] = mapminmax(t)

%建立BP神经网络

net = newff(pn, tn, [200,10])

%每10轮回显示一次结果

net.trainParam.show = 10

%最大训练次数

net.trainParam.epochs = 5000

%网络的学习速率

net.trainParam.lr = 0.05

%训练网络所要达到的目标误差

net.trainParam.goal = 10^(-8)

%网络误差如果连续6次迭代都没变化,则matlab会默认终止训练。为了让程序继续运行,用以下命令取消这条设置

net.divideFcn = ''

%开始训练网络

net = train(net, pn, tn)

%训练完网络后要求网络的权值w和阈值b

%获取网络权值、阈值

netiw = net.iw

netlw = net.lw

netb = net.b

w1 = net.iw{1,1}%输入层到隐层1的权值

b1 = net.b{1} %输入层到隐层1的阈值

w2 = net.lw{2,1}%隐层1到隐层2的权值

b2 = net.b{2} %隐层1到隐层2的阈值

w3 = net.lw{3,2}%隐层2到输出层的权值

b3 = net.b{3} %隐层2到输出层的阈值

%在默认的训练函数下,拟合公式为,y=w3*tansig(w2*tansig(w1*in+b1)+b2)+b3

%用公式计算测试数据[x1x2]的输出,输入要归一化,输出反归一化

in = mapminmax('apply',[x1x2],inputStr)

y=w3*tansig(w2*tansig(w1*in+b1)+b2)+b3

y1=mapminmax('reverse',y,outputStr)

%用bp神经网络验证计算结果

out = sim(net,in)

out1=mapminmax('reverse',out,outputStr)

扩展资料:

注意事项

一、训练函数

1、traingd

Name:Gradient descent backpropagation (梯度下降反向传播算法 )

Description:triangd is a network training function that updates weight and bias values  according to gradient descent.            

2、traingda

Name:Gradient descent  with adaptive learning rate backpropagation(自适应学习率的t梯度下降反向传播算法)

Description:triangd is a network training function that updates weight and bias values  according to gradient descent with adaptive learning rate. it will return a trained net (net) and  the trianing record (tr).

3、traingdx (newelm函数默认的训练函数)

name:Gradient descent with momentum and adaptive learning rate backpropagation(带动量的梯度下降的自适应学习率的反向传播算法)

Description:triangdx is a network training function that updates weight and bias values  according to gradient descent momentum and an adaptive learning rate.it will return a trained net (net) and  the trianing record (tr). 

4、trainlm

Name:Levenberg-Marquardt backpropagation (L-M反向传播算法)

Description:triangd is a network training function that updates weight and bias values  according toLevenberg-Marquardt optimization. it will return a trained  net (net) and  the trianing record (tr).

注:更多的训练算法请用matlab的help命令查看。

二、学习函数

1、learngd

Name:Gradient descent weight and bias learning function (梯度下降的权值和阈值学习函数)

Description:learngd is the gradient descent weight and bias learning function, it will return the weight change dW and a new learning state.

2、learngdm

Name:Gradient descent with momentum weight and bias learning function (带动量的梯度下降的权值和阈值学习函数)

Description:learngd is the gradient descent  with momentum weight and bias learning function, it will return the weight change dW and a new learning state.

注:更多的学习函数用matlab的help命令查看。

三、训练函数与学习函数的区别

函数的输出是权值和阈值的增量,训练函数的输出是训练好的网络和训练记录,在训练过程中训练函数不断调用学习函数修正权值和阈值,通过检测设定的训练步数或性能函数计算出的误差小于设定误差,来结束训练。 

或者这么说:训练函数是全局调整权值和阈值,考虑的是整体误差的最小。学习函数是局部调整权值和阈值,考虑的是单个神经元误差的最小。

它的基本思想是学习过程由信号的正向传播与误差的反向传播两个过程组成。

正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。

反向传播时,将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。

net=newff(pr,[3,2],{'logsig','logsig'}) %创建 一个bp 神经网络

net.trainParam.show = 10 %显示训练迭代过程

net.trainParam.lr = 0.05 %学习速率0,05

net.trainParam.goal = 1e-10 %训练精度

net.trainParam.epochs = 50000 %最大训练次数

net = train(net,p,goal) %训练

结果要么接近于1 ,要么就是0,就这俩类啊,这就是分类结果;

每次都有些差异 很正常,只要不大


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7731825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存