神经网络算法matlab
Ⅰ 请问matlab中RBF神经网络newrbe函数用的什么算法
newrbe是设计精确的径向基神经网络的函数,用法如:
P = [1 2 3];%输入
T = [2.0 4.1 5.9];%目标
net = newrbe(P,T);%生成神经网络
其算法是:生成的网络有2层,第一层是radbas神经元,用dist计算加权输入,用netprod计算网络输入,第二层是purelin神经元,用 dotprod计算加权输入,用netsum计算网络输入。两层都有偏差b。
newrbe先设第一层权重为p',偏差为0.8326,第二层权重IW{2,1}从第一层的仿真输出 A{1}得到,偏差 b{2}从解线性方程 [W{2,1} b{2}] * [A{1}; ones] = T 得到。
Ⅱ 如何用matlab软件实现神经网络应用
给你一个实例,希望通过该例子对实现神经网络应用有一定的了解。
%x,y分别为输入和目标向量
x=1:5;
y=[639 646 642 624 652];
%创建一个前馈网络
net=newff(minmax(x),[20,1],{'tansig','purelin'});
%仿真未经训练的网络net并画图
y1=sim(net,x);plot(x,y1,':');
%采用L-M优化算法
net.trainFcn='trainlm';
%设置训练算法
net.trainParam.epochs=500;net.trainParam.goal=10^(-6);
%调用相应算法训练BP网络
[net,tr,yy]=train(net,x,y);
%对BP网络进行仿真
y1=sim(net,x);
%计算仿真误差
E=y-y1;MSE=mse(E)
hold on
%绘制匹配结果曲线
figure;
plot(x,y1,'r*',x,y,'b--')
执行结果
Ⅲ 用BP神经网络建立数学模型,MATLAB实现,怎样得到输入到输出的计算公式
clear;
%输入数据矩阵
p1=zeros(1,1000);
p2=zeros(1,1000);
for i=1:1000
p1(i)=rand;
p2(i)=rand;
end
p=[p1;p2];
%目标(输出)数据矩阵
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);
%获取网络权值、阈值
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} ;
in = mapminmax('apply',[0.1;0.5],inputStr);
%用公式计算输出
y=w3*tansig(w2*tansig(w1*in+b1)+b2)+b3;
y1=mapminmax('reverse',y,outputStr);
%用网络验证计算结果
out = sim(net,in);
out1=mapminmax('reverse',out,outputStr);
Ⅳ 如何用MATLAB的神经网络工具箱实现三层BP网络
使用神经网络工具箱可以非常简便地实现网络建立和训练,实例代码如下:
%%BP算法内
functionOut=bpnet(p,t,p_test)
%p,t为样本需要提前组织好
globalS1
net=newff(minmax(p),[S1,8],{'tansig','purelin'},'trainlm');%trainlm训练函数最容有效
%net=newff(P,T,31,{'tansig','purelin'},'trainlm');%新版用法
net.trainParam.epochs=1000;
net.trainParam.goal=0.00001;
net.trainParam.lr=0.01;
net.trainParam.showWindow=false;%阻止训练窗口的弹出
net.trainParam.showCommandLine=false;%阻止训练窗口的弹出
net=train(net,p,t);
Out=sim(net,p_test);
end
上面的代码不完整,完整的带训练样本数据的程序见附件。
Ⅳ Matlab神经网络原理中可以用于寻找最优解的算法有哪些
若果对你有帮助,请点赞。
神经网络的结构(例如2输入3隐节点1输出)建好后,一般就要求神经网络里的权值和阈值。现在一般求解权值和阈值,都是采用梯度下降之类的搜索算法(梯度下降法、牛顿法、列文伯格-马跨特法、狗腿法等等),这些算法会先初始化一个解,在这个解的基础上,确定一个搜索方向和一个移动步长(各种法算确定方向和步长的方法不同,也就使各种算法适用于解决不同的问题),使初始解根据这个方向和步长移动后,能使目标函数的输出(在神经网络中就是预测误差)下降。 然后将它更新为新的解,再继续寻找下一步的移动方向的步长,这样不断的迭代下去,目标函数(神经网络中的预测误差)也不断下降,最终就能找到一个解,使得目标函数(预测误差)比较小。
而在寻解过程中,步长太大,就会搜索得不仔细,可能跨过了优秀的解,而步长太小,又会使寻解过程进行得太慢。因此,步长设置适当非常重要。
学习率对原步长(在梯度下降法中就是梯度的长度)作调整,如果学习率lr = 0.1,那么梯度下降法中每次调整的步长就是0.1*梯度,
而在matlab神经网络工具箱里的lr,代表的是初始学习率。因为matlab工具箱为了在寻解不同阶段更智能的选择合适的步长,使用的是可变学习率,它会根据上一次解的调整对目标函数带来的效果来对学习率作调整,再根据学习率决定步长。
机制如下:
if newE2/E2 > maxE_inc %若果误差上升大于阈值
lr = lr * lr_dec; %则降低学习率
else
if newE2 < E2 %若果误差减少
lr = lr * lr_inc;%则增加学习率
end
详细的可以看《神经网络之家》nnetinfo里的《[重要]写自己的BP神经网络(traingd)》一文,里面是matlab神经网络工具箱梯度下降法的简化代码
Ⅵ MATLAB中BP神经网络的训练算法具体是怎么样的
就是用一组非线性的表达式逼近数据