神经网络简易教程Word文档格式.docx
- 文档编号:18260436
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:14
- 大小:104.89KB
神经网络简易教程Word文档格式.docx
《神经网络简易教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《神经网络简易教程Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
clc
%---------------------------------------------------------------
%NEWFF——生成一个新的前向神经网络,函数格式:
%net=newff(PR,[S1S2...SNl],{TF1TF2...TFNl},BTF,BLF,PF)takes,
%PR--Rx2matrixofminandmaxvaluesforRinputelements
%(对于R维输入,PR是一个Rx2的矩阵,每一行是相应输入的边界值)
%Si--第i层的维数
%TFi--第i层的传递函数,default='
tansig'
%BTF--反向传播网络的训练函数,default='
traingdx'
%BLF--反向传播网络的权值/阈值学习函数,default='
learngdm'
%PF--性能函数,default='
mse'
%TRAIN——对BP神经网络进行训练,函数格式:
train(NET,P,T,Pi,Ai,VV,TV),输入参数:
%net--所建立的网络
%P--网络的输入
%T--网络的目标值,default=zeros
%Pi--初始输入延迟,default=zeros
%Ai--初始网络层延迟,default=zeros
%VV--验证向量的结构,default=[]
%TV--测试向量的结构,default=[]
%返回值:
%net--训练之后的网络
%TR--训练记录(训练次数及每次训练的误差)
%Y--网络输出
%E--网络误差
%Pf--最终输入延迟
%Af--最终网络层延迟
%SIM——对BP神经网络进行仿真,函数格式:
%[Y,Pf,Af,E,perf]=sim(net,P,PiAi,T)
%参数与前同。
定义训练样本
%P为输入矢量
echoon
P=[-1,
-2,
3,
1;
-1,
1,
5,
-3];
%T为目标矢量
T=[-1,-1,1,1];
创建一个新的前向神经网络
net=newff(minmax(P),[3,1],{'
'
purelin'
},'
traingdm'
)
%训练函数:
traingdm,功能:
以动量BP算法修正神经网络的权值和阈值。
%它的相关特性包括:
%epochs:
训练的次数,默认:
100
%goal:
误差性能目标值,默认:
%lr:
学习率,默认:
0.01
%max_fail:
确认样本进行仿真时,最大的失败次数,默认:
5
%mc:
动量因子,默认:
0.9
%min_grad:
最小梯度值,默认:
1e-10
%show:
显示的间隔次数,默认:
25
%time:
训练的最长时间,默认:
inf
当前输入层权值和阈值
inputWeights=net.IW{1,1}
inputbias=net.b{1}
当前网络层权值和阈值
layerWeights=net.LW{2,1}
layerbias=net.b{2}
设置网络的训练参数
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=1000;
net.trainParam.goal=1e-3;
调用TRAINGDM算法训练BP网络
[net,tr]=train(net,P,T);
对BP网络进行仿真
A=sim(net,P)
计算仿真误差
E=T-A
MSE=mse(E)
echooff
figure;
plot((1:
4),T,'
-*'
(1:
4),A,'
-o'
)
%采用贝叶斯正则化算法提高BP网络的推广能力。
在本例中,我们采用两种训练方法,即L-M优化算法
%(trainlm)和贝叶斯正则化算法(trainbr),
%用以训练BP网络,使其能够拟合某一附加有白噪声的正弦样本数据。
其中,样本数据可以采用如下
%MATLAB语句生成:
%输入矢量:
P=[-1:
0.05:
1];
%目标矢量:
randn(’seed’,78341223);
%T=sin(2*pi*P)+0.1*randn(size(P));
%MATLAB程序如下:
closeall
clearall
clc
%P为输入矢量
1];
%T为目标矢量
T=sin(2*pi*P)+0.1*randn(size(P));
%创建一个新的前向神经网络
net=newff(minmax(P),[20,1],{'
});
disp('
1.L-M优化算法TRAINLM'
);
disp('
2.贝叶斯正则化算法TRAINBR'
choice=input('
请选择训练算法(1,2):
'
if(choice==1)
%采用L-M优化算法TRAINLM
net.trainFcn='
trainlm'
;
%设置训练参数
net.trainParam.epochs=500;
net.trainParam.goal=1e-6;
%重新初始化
net=init(net);
pause;
elseif(choice==2)
%采用贝叶斯正则化算法TRAINBR
trainbr'
%重新初始化
net=init(net);
end
%调用相应算法训练BP网络
%对BP网络进行仿真
A=sim(net,P);
%计算仿真误差
E=T-A;
MSE=mse(E)%绘制匹配结果曲线
figure
plot(P,A,'
o'
P,T,'
+'
P,sin(2*pi*P),'
:
legend('
网络输出'
目标值-带噪声'
目标值-不带噪声'
matlabnewff使用
设[P,T]是训练样本,[X,Y]是测试样本;
net=newrb(P,T,err_goal,spread);
%建立网络
q=sim(net,p);
e=q-T;
plot(p,q);
%画训练误差曲线
q=sim(net,X);
e=q-Y;
plot(X,q);
%画测试误差曲线
训练前馈网络的第一步是建立网络对象。
函数newff建立一个可训练的前馈网络。
这需要4个输入参数。
第一个参数是一个Rx2的矩阵以定义R个输入向量的最小值和最大值。
第二个参数是一个设定每层神经元个数的数组。
第三个参数是包含每层用到的传递函数名称的细胞数组。
最后一个参数是用到的训练函数的名称。
举个例子,下面命令将创建一个二层网络。
它的输入是两个元素的向量,第一层有三个神经元(3),第二层有一个神经元
(1)。
第一层的传递函数是tan-sigmoid,输出层的传递函数是linear。
输入向量的第一个元素的范围是-1到2[-12],输入向量的第二个元素的范围是0到5[05],训练函数是traingd。
net=newff([-12;
05],[3,1],{'
traingd'
这个命令建立了网络对象并且初始化了网络权重和偏置,因此网络就可以进行训练了。
我们可能要多次重新初始化权重或者进行自定义的初始化。
下面就是初始化的详细步骤。
在训练前馈网络之前,权重和偏置必须被初始化。
初始化权重和偏置的工作用命令init来实现。
这个函数接收网络对象并初始化权重和偏置后返回网络对象。
下面就是网络如何初始化的:
net=init(net);
我们可以通过设定网络参数net.initFcn和net.layer{i}.initFcn这一技巧来初始化一个给定的网络。
net.initFcn用来决定整个网络的初始化函数。
前馈网络的缺省值为initlay,它允许每一层用单独的初始化函数。
设定了net.initFcn,那么参数net.layer{i}.initFcn也要设定用来决定每一层的初始化函数。
对前馈网络来说,有两种不同的初始化方式经常被用到:
initwb和initnw。
initwb函数根据每一层自己的初始化参数(net.inputWeights{i,j}.initFcn)初始化权重矩阵和偏置。
前馈网络的初始化权重通常设为rands,它使权重在-1到1之间随机取值。
这种方式经常用在转换函数是线性函数时。
initnw通常用于转换函数是曲线函数。
它根据Nguyen和Widrow[NgWi90]为层产生初始权重和偏置值,使得每层神经元的活动区域能大致平坦的分布在输入空间。
它比起单纯的给权重和偏置随机赋值有以下优点:
(1)减少神经元的浪费(因为所有神经元的活动区域都在输入空间内)。
(2)有更快的训练速度(因为输入空间的每个区域都在活动的神经元范围中)。
初始化函数被newff所调用。
因此当网络创建时,它根据缺省的参数自动初始化。
init不需要单独的调用。
可是我们可能要重新初始化权重和偏置或者进行自定义的初始化。
例如,我们用newff创建的网络,它缺省用initnw来初始化第一层。
如果我们想要用rands重新初始化第一层的权重和偏置,我们用以下命令:
net.layers{1}.initFcn='
initwb'
net.inputWeights{1,1}.initFcn='
rands'
net.biases{1,1}.initFcn='
net.biases{2,1}.initFcn='
IW:
输入层到隐含层的权重矩阵
LW:
隐含层和输出层间的权重矩阵
b:
阀值向量
如网络为net,输入层和输出均为一个接点情况下,则用
net.IW{1,1}可以看到第一个输入接点到第一隐含层的权重向量;
net.LW{2,1}可以看到隐含层到输出层的权值向量;
net.b{1,1}是隐含层的阀值向量,
net.b{2,1}是输出接点的阀值;
在多输入输出下先用
net.IW
net.LW
net.b
查看各矩阵结构,再相应用net.IW{?
?
}等语句查到相关的向量
_________________________________________________________________________________________________________
clearall;
%definetheinputandoutput
p=[974874527;
3884661764;
131624392251;
183624101860;
155723011578;
149018772749;
151312782026;
107015612794;
134724153306;
132427461233;
138314631847;
128202347];
t=[197972428234548];
%创建bp网络和定义训练函数
%这里是为了方便而建立一个矩阵,注意是12x2,不是3x2
pr=[527974;
3881764;
13162439;
18362410;
15572301;
14902749;
12782026;
10702794;
13473306;
12332746;
13831847;
02347]
net=newff(pr,[15,1],{'
'
%这里要加入输出层的转移函数,一般是trainlm
net.trainparam.goal=50;
net.trainparam.epochs=5000;
%训练神经网络
[net,tr]=train(net,p,t);
%输出训练后的权值和阈值
iw1=net.IW{1};
b1=net.b{1};
lw2=net.LW{2};
b2=net.b{2};
%存储训练好的神经网络
savenetkohlernet
怎样知道matlab已经训练好的神经网络的权值、步长以及阙值
用matlab训练神经网络时不需输入权值、步长以及阙值,如果我想知道matlab已经训练好的神经网络的权值、步长以及阙值该怎末操作?
训练好的权值、阈值的输出方法是:
输入到隐层权值:
w1=net.iw{1,1}
隐层阈值:
theta1=net.b{1}
隐层到输出层权值:
w2=net.lw{2,1};
输出层阈值:
theta2=net.b{2}
帮我看看matlab的这段程序(有关神经网络BP算法)
在一位老师的讲义上看到的程序,但是有些东西不太明白,请求帮助
程序如下:
****************************************************************
clf;
figure(gcf)
%NEWFF—建立一个BP网络
%TRAIN—对BP网络进行训练
%SIM—对BP网络进行仿真
pause
P=-1:
0.1:
1;
T=[-.9602-.5770-.0729.3771.6405.6600.4609...
.1336-.2013-.4344-.5000-.3930-.1647.0988...
.3072.3960.3449.1816-.0312-.2189-.3201];
plot(P,T,'
title('
TrainingVectors'
xlabel('
InputVectorP'
ylabel('
TargetVectorT'
net=newff(minmax(P),[51],{'
learngd'
sse'
k=pickic;
ifk==2
net.iw{1,1}=[3.5000;
3.5000;
3.5000];
net.b{1}=[-2.8562;
1.0774;
-0.5880;
1.4083;
2.8722];
net.lw{2,1}=[0.2622-0.2375-0.45250.2361-0.1718];
net.b{2}=[0.1326];
end
net.iw{1,1}
net.b{1}
net.lw{2,1}
net.b{2}
me=8000;
net.trainParam.show=10;
net.trainParam.goal=0.02;
net.trainParam.lr=0.01;
A=sim(net,P);
sse=sumsqr(T-A);
fori=1:
me/100
ifsse>
net.trainparam.goal,i=i-1;
break,end
net.trainParam.epochs=100;
trp((1+100*(i-1)):
(max(tr.epoch)+100*(i-1)))=tr.perf(1:
max(tr.epoch));
holdon
plot(P,A)
holdoff
message=sprintf('
Traingd,Epoch%%g/%g,SSE%%g\n'
me);
fprintf(message,(max(tr.epoch)+100*(i-1)),sse)
plot(tr)
[i,j]=size(trp);
plot(1:
j,net.trainParam.goal,'
r--'
ErrorSignal'
epoch'
Error'
p=0.5;
a=sim(net,p)
用matlab神经网络进行需水量预测
悬赏分:
200-解决时间:
2010-6-319:
53
有28年的数据62356897701270237289789675897986799880128123845684988654872389231009311626115361127696068769806875419717888692879710
需要用神经网络进行预测,进行拟合对比分析。
因为没学过MATLAB对此一窍不通,任务又需要,所以请大侠帮忙,如何实现。
问题补充:
对比是与原来的这些数据对比
clear;
%用bp网络,首先对数据分组:
%假设从当年起后3年的需水量和前十年有关。
即第十一,十二,十三年的需水量由第一年到第十年确定,第十二,十三,十四年的需水量由第二年到第十一年确定...
%则:
输入量
p=[6235689770127023728978967589798679988012;
6897701270237289789675897986799880128123;
7012702372897896758979867998801281238456;
7023728978967589798679988012812384568498;
7289789675897986799880128123845684988654;
7896758979867998801281238456849886548723;
7589798679988012812384568498865487238923;
79867998801281238456849886548723892310093;
799880128123845684988654872389231009311626;
8012812384568498865487238923100931162611536;
81238456849886548723892310093116261153611276;
8456849886548723892310093
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络 简易 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)