神经网络初学答疑汇总.docx
- 文档编号:8716661
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:12
- 大小:20.24KB
神经网络初学答疑汇总.docx
《神经网络初学答疑汇总.docx》由会员分享,可在线阅读,更多相关《神经网络初学答疑汇总.docx(12页珍藏版)》请在冰豆网上搜索。
神经网络初学答疑汇总
写得很不错的博文,取自:
晴天小猪的博文,汇总出来与大家一起分享。
神经网络(BP)系列
(1)关于样本的归一和反归一
这个系列主要针对使用matlab 神经网络工具箱,对一些初学者容易理解错误的地方进行解析。
我的解析也可能有理解不对的地方,希望大家批评指正.
这个系列主要针对使用matlab神经网络工具箱,对一些初学者容易理解错误的地方进行解析。
1. 神经网络一列为一个样本,所以对于matlab而言,要求输入和输出的列数必须一样的
经常有人问起的问题:
Errorusing==>network/train
Targetsareincorrectlysizedfornetwork.
Matrixmusthave1rows.
解决:
要求PT的列数一样,如果不一样P=p’t=t’转置一下
2. 归一
澄清一个对归一的错误理解1
样本矩阵为9行4列。
9组样本,4个变量。
现在归一化:
x=[68.7 66.6 5610 19.2;
89.9 90.8 4500 11.8;
120.8 120.6 6800 20.6;
169 40.4 6160 40.6;
180.8 69.8 7330 33.4;
190.3 130.2 7320 31.6;
109.8 151.1 5754 86.1;
33.2 61.4 8255 22.6;
111.7 126.6 7040 13.6;]
写法一:
fori=1:
9
x1(i,:
)=(x(i,:
)-min(x(i,:
)))/(max(x(i,:
))-min(x(i,:
)))
end
结果:
0.0089 0.0085 1.0000 0
0.0174 0.0176 1.0000 0
0.0148 0.0148 1.0000 0
0.0210 0 1.0000 0.0000
0.0202 0.0050 1.0000 0
0.0218 0.0135 1.0000 0
0.0042 0.0115 1.0000 0
0.0013 0.0047 1.0000 0
0.0140 0.0161 1.0000 0
写法二:
x=x'
fori=1:
4
x1(i,:
)=(x(i,:
)-min(x(i,:
)))/(max(x(i,:
))-min(x(i,:
)))
end
结果:
Columns1through8
0.2260 0.3609 0.5576 0.8644 0.9395 1.0000 0.4876 0
0.2367 0.4553 0.7245 0 0.2656 0.8112 1.0000 0.1897
0.2956 0 0.6125 0.4421 0.7537 0.7510 0.3340 1.0000
0.0996 0 0.1184 0.3876 0.2907 0.2665 1.0000 0.1454
Column9
0.4997
0.7787
0.6764
0.0242
注意:
写法 2为正确的归一化
对归一的错误理解2
将数据集分为训练集和测试集,对训练集和测试集分别做归一处理
所以就会有人问如果我的测试集只有一个数据如何归一呀
最大最小值从那里找呀
正确的理解是:
训练集和测试集的归一标准是一样的
建议:
如果训练集和测试集是一起归一的可以自己编程实现归一
如果是训练集和测试集是分开的,最好是使用matlab自带的premnmx、postmnmx、tramnmx 函数
如果是自己编程的话,请注意训练集和测试集的归一标准需要一样
premnmx、postmnmx、tramnmx函数
的使用例子如下:
Example
Hereisthecodetonormalizeagivendatasetso
thattheinputsandtargetswillfallinthe
range[-1,1],usingPREMNMX,andthecodetotrainanetwork
withthenormalizeddata.
p=[-10-7.5-5-2.502.557.510];
t=[07.07-10-7.0707.07107.070];
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
net=newff(minmax(pn),[51],{'tansig''purelin'},'trainlm');
net=train(net,pn,tn);
Ifwethenreceivenewinputstoapplytothetrained
network,wewilluseTRAMNMXtotransformthem
first.Thenthetransformedinputscanbeused
tosimulatethepreviouslytrainednetwork.The
networkoutputmustalsobeunnormalizedusing
POSTMNMX.
p2=[4-7];
[p2n]=tramnmx(p2,minp,maxp);
an=sim(net,pn);
[a]=postmnmx(an,mint,maxt);
这个是归一到-1和1之间那我要归一到01之间怎么办
有人说可以使用加绝对值就归一到01之间了
我觉得加绝对值可能会有些问题
比较好的方式是变换
P在-11之间
Pp=(p+1)/2就可以归一到01之间
至于要归一到0.10.9之间选取合适的变换就可以做到了
神经网络(BP)系列
(2)(初学者系列)每次结果不一样解析
这个系列主要针对使用matlab神经网络工具箱,对一些初学者容易理解错误的地方进行解析。
神经网络每次结果不同解析
神经网络每次结果不同是因为初始化的权值和阈值是随机的
因为每次的结果不一样,才有可能找到比较理想的结果啊
找到比较好的结果后,用命令savefilenamenet;保存网络,
可使预测的结果不会变化,调用时用命令loadfilenamenet;
取p_test=[ ];
t_test=[ ];
t=sim(net,p_test);
err=t_test-t;
plot(p_test,err);
选择误差小的保存网络
savefilenamenet
以后调用时
loadfilenamenet
p_test=[];
t_test=[];
t=sim(net,p_test);
err=t_test-t;
plot(p_test,err):
因为每次初始化网络时都是随机的,而且训练终止时的误差也不完全相同,结果训练后的权植和阀也不完全相同(大致是一样的),所以每次训练后的结果也略有不同
举个例子,这样初始化就能使网络的输出结果是一样的,另外也可以给网络特定的权值,一种方法是把预测结果后的效果比较好的权值做为初值
p=[0.87260.94410;000.7093;0.73780.70930.3795;0.64160.37950.7031;10.70310.4241;0.77740.42410.9559;0.95590.50120.7052;...
0.82090.70520.4983;0.60110.49831;]';
t=[00.73780.641610.77740.50120.82090.60110.9350];
rand('state',0);
net=newff(minmax(p),[6,1],{'tansig','logsig'},'trainlm');
net.trainParam.epochs=2000;
net.trainParam.goal=0.001;
net=train(net,p,t);
y=sim(net,p);
error=y-t;
res=norm(error);
p_test=[0.935010.6236;]';
t_test=[0.8027]
a=sim(net,p_test)
rand('state',0);
这个的作用是每次初始化一样
0是种子数,如果换成其他数,就可以产生不同的随机值
注:
rand('state',0);的使用有点为结果相同而相同,至于这样的结果网络性能是否达到好的要求则没有考虑,建议还是不要用这种方法使每次结果相同
用保存网络的方法吧
消除初值影响可以考虑的另一个方法是简单集成神经网络
原理
由于选择不同的权值所得结果不同,使最终神经网络泛化能力体现出一定的随机性。
利用这个特性也可以改善神经网络的泛化能力,神经网络集成便是利用这种思路的体现,即先训练一组只有初始权值不同的子网,然后通过各子网“表决(Voting)”的形式(如加权和)得到学习系统的输出。
当神经网络集成用于分类器时,集成的输出通常由个体网络的输出投票产生。
通常利用绝对多数投票法(某分类成为最终结果当且仅当输出结果为该分类的神经网络的数目最多)。
理论分析和大量实验表明,后者优于前者。
因此,在对分类器进行集成时,目前大多采用相对多数投票法。
当神经网络集成用于回归估计时,集成的输出通常由各网络的输出通过简单平均或加权平均产生。
Perrone等人认为,采用加权平均可以得到比简单平均更好的泛化能力。
神经网络(BP)系列(3)(初学者请看)分类实例
分类实例
输入输出设计:
对某一问题分析,影响网络性能的输入主要有5个指标,输出则分为8类。
8类的话可以用三位二进制表示。
000
001
010
011
100
101
110
111
神经网络的输入为5维的向量,输出为三维的向量。
输入的数据具有不同的单位和量级,所以在输入在输入神经网络之前应该首先进行归一化处理,将样本数据归一到01之间。
样本总共有328组数据
将样本集分为训练集和测试集
随机抽取70取做为测试测试集
其余的作为训练集
网络设计
采用tansig(x)和logsig(x)函数作为传输函数,tansig(x)如下式:
tansig=2/(1+exp(-2x))-1
logsig(x)如下式:
logsig(x)=1/(1+exp(-n))
对于有限个输入到输出的映射,并不需要无限个隐层节点,这就涉及到如何选择隐层节点数的问题,而这一问题的复杂性,使得至今为止尚未找到一个很好的解析式,隐层节点数往往根据前人设计所得的经验和自己进行试验来确定。
设计网络时我采用的方法是通过神经网络训练来确定隐含层的个数,首先确定隐含层中节点数目的范围,设计一个隐含层神经元数目可变的BP网络,通过误差对比,确定最佳的隐含层神经元的个数。
最后确定的隐含层的个数为12。
所以网络结构为5-12-3的三层结构。
load('CSHuju1.mat');
p=CC1(:
[1,3:
6])';
T=[000;
111;
110;
101;
100;
011;
010;
001];
t=repmat(T,41,1)';
pp=p;
%%%%%%归一到01之间
fori=1:
5
p(i,:
)=(p(i,:
)-min(p(i,:
)))/(max(p(i,:
))-min(p(i,:
)));
end
AllSamNum=328;%总样本数
TrainSamNum=258;%训练样本数
TestSamNum=AllSamNum-TrainSamNum;%测试样本数
PerPos=randperm(AllSamNum);
TrainDataIn=p(:
1:
TrainSamNum)
TrainDataOut=t(:
1:
TrainSamNum)
TestDataIn=p(:
PerPos(:
TrainSamNum+1:
TrainSamNum+TestSamNum))
TestDataOut=t(:
PerPos(:
TrainSamNum+1:
TrainSamNum+TestSamNum))
MaxMin=[01;01;01;01;01];
net=newff(MaxMin,[12,3],{'tansig','logsig'},'trainlm');
%训练参数设置
net.trainParam.epochs=1000;
%训练次数
net.trainParam.goal=0.0001;
%训练结束的目标
LP.lr=0.1;
%学习率
net.trainParam.show=20;
net=train(net,TrainDataIn,TrainDataOut);
out=sim(net,TestDataIn)
训练结果:
TRAINLM,Epoch0/1000,MSE0.296308/0.0001,Gradient83.9307/1e-010
TRAINLM,Epoch20/1000,MSE0.0224641/0.0001,Gradient6.7605/1e-010
TRAINLM,Epoch40/1000,MSE0.00563627/0.0001,Gradient3.27027/1e-010
TRAINLM,Epoch60/1000,MSE0.00348587/0.0001,Gradient1.49868/1e-010
TRAINLM,Epoch80/1000,MSE0.00247714/0.0001,Gradient0.459233/1e-010
TRAINLM,Epoch100/1000,MSE0.0018843/0.0001,Gradient0.289155/1e-010
TRAINLM,Epoch120/1000,MSE0.00148204/0.0001,Gradient0.392871/1e-010
TRAINLM,Epoch140/1000,MSE0.00119585/0.0001,Gradient0.340864/1e-010
TRAINLM,Epoch160/1000,MSE0.000980448/0.0001,Gradient0.391987/1e-010
TRAINLM,Epoch180/1000,MSE0.000779059/0.0001,Gradient0.389835/1e-010
TRAINLM,Epoch200/1000,MSE0.000606974/0.0001,Gradient0.310202/1e-010
TRAINLM,Epoch220/1000,MSE0.000388926/0.0001,Gradient0.331632/1e-010
TRAINLM,Epoch240/1000,MSE0.000143563/0.0001,Gradient0.0403953/1e-010
TRAINLM,Epoch248/1000,MSE9.87756e-005/0.0001,Gradient0.174263/1e-010
TRAINLM,Performancegoalmet.
训练好的权值、阈值的输出方法是:
输入到隐层权值:
w1=net.iw{1,1}
隐层阈值:
theta1=net.b{1}
隐层到输出层权值:
w2=net.lw{2,1};
输出层阈值:
theta2=net.b{2}
>>w1=net.iw{1,1}
w1=
1.7663 -2.8022 -0.7142 -2.1099 -2.4011
3.6614 -2.5297 -4.4295 5.0508 8.1899
4.4007 7.6775 -6.0282 6.1567 1.8775
4.5009 -9.9915 5.9737 5.0234 3.3931
0.2703 -2.8850 0.4482 -2.9153 1.3648
2.3769 3.3151 0.8745 3.1900 1.2608
-2.2815 -6.6847 1.8738 2.4093 -2.9033
-5.3332 6.1506 -8.4386 -6.7979 3.1428
-0.0135-10.8942 -9.6333 7.2311 12.0693
2.3130 5.2211 0.0155 2.9431 0.3135
-6.4017 -0.8987 0.1976 3.2527 0.1444
-3.6517 -1.6339 3.5505 2.4813 1.7880
>>theta1=net.b{1}
theta1=
0.5955
-5.4876
-9.8986
-4.4731
3.6523
-4.0371
5.6187
5.7426
0.9147
-8.5523
-2.3632
-5.6106
>>w2=net.lw{2,1}
w2=
Columns1through8
-0.2751 -3.5658 -2.3689 -6.4192 -1.1209 1.5711 -1.7615 7.6202
-1.2874 -9.1588-14.4533 7.5064 3.7074 0.9019 8.7033 -5.0031
3.3536 -0.8844 7.8887 0.9336 0.8410 -2.4905 1.0627 -9.3513
Columns9through12
-2.5894 -1.9950 -3.0132 -4.7009
13.3490 -9.8521 -4.6680 -4.2037
-5.9251 2.9388 -1.6797 -2.1077
>>theta2=net.b{2}
theta2=
-2.4762
0.5692
0.6694
输出:
out=
Columns1through8
1.0000 1.0000 0.0020 0.0000 1.0000 1.0000 0.0000 0.0000
1.0000 0.0000 0.0041 1.0000 1.0000 1.0000 1.0000 1.0000
0.9991 0.0000 0.0036 0.0015 0.9992 0.9985 0.0055 0.0036
Columns9through16
1.0000 0.0000 0.0019 1.0000 0.0000 0.0000 0.0000 0.9996
1.0000 1.0000 0.9901 1.0000 1.0000 1.0000 1.0000 0.0000
0.9977 0.9999 0.9996 0.9994 0.0046 0.0023 0.0014 1.0000
Columns17through24
0.0020 0.9925 0.0020 0.0000 0.0020 1.0000 0.0002 1.0000
0.0041 0.0284 0.0041 0.0284 0.0041 1.0000 0.9983 1.0000
0.0036 0.9955 0.0036 1.0000 0.0036 0.9989 0.9999 0.9990
Columns25through32
1.0000 0.9938 1.0000 0.0000 1.0000 0.9999 0.0000 1.0000
1.0000 0.0177 0.0000 0.0021 1.0000 0.0006 1.0000 1.0000
0.0000 0.9971 0.0000 1.0000 0.0000 0.0004 0.9999 0.0000
Columns33through40
0.9954 1.0000 0.0000 0.0000 0.9951 0.0020 0.0000 0.9997
0.0065 1.0000 1.0000 0.0025 0.0178 0.0041 1.0000 0.0000
0.9986 0.9990 0.9999 1.0000 0.0101 0.0036 0.0013 1.0000
Columns41through48
0.0000 1.0000 0.9983 0.0000 0.0020 1.0000 0.0000 0.9873
0.0020 1.0000 0.0000 0.0037 0.0041 1.0000 0.0328 0.0637
1.0000 0.0000 0.9999 1.0000 0.0036 0.9982 1.0000 0.9884
Columns49through56
0.0000 0.0001 1.0000 1.0000 1.0000 0.0000 0.0004 1.0000
0.0164 0.9992 0.9982 1.0000 1.0000 1.0000 0.9965 0.9998
1.0000 0.9999 0.9948 0.9991 0.9989 0.0024 0.9998 0.9968
Columns57through64
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络 初学 答疑 汇总