神经网络第四章课后答案与matlab实验报告(附代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
神经网络计算机实验报告
(232XXX,模式识别与智能系统研究所)
4.16研究使用sigmoid非线形函数的反向传播学习方法获得一对一映射
1.f(x) = 1/x, 1≤x≤100
log x, 1≤x≤10
2.f(x) =
10
3.f(x) = exp(-x) , 1≤x≤10
4.f(x) = sinx, 0≤x≤π/2
对每个映射,完成如下工作:
(a)建立两个数据集,一个用于网络训练,另一个用于测试.
(b)假设具有单个隐藏层,利用训练数据集计算网络的突触权值.
(c)通过使用测试数据求网络计算精度的值
使用单个隐藏层,但隐藏神经元数目可变,研究网络性能是如何受到隐藏层影响的
解答:
一. 对于1-4的函数分别对(a).(b).(c)问题用Matlab求解,以下是结果及部分代码:
1. f(x) = 1/x, 1≤x≤100
(a)我们根据函数表达式可以建立两个数据集,即
训练集
P = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20….]
t = [1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833
0.0769 0.0714 0.0667 0.0625 0.0588 0.0556 0.0526 0.0500….];
测试集
p = [36 37 38 39 40 31 32 33 34 35 41 42 43 44 45 46 47 48 49 50];
t = [0.0278 0.0270 0.0263 0.0256 0.0250 0.0323 0.0313 0.0303 0.0294 0.0286 0.0244 0.0238
0.0233 0.0227 0.0222 0.0217 0.0213 0.0208 0.0204 0.0200];
(b)根据题目要求,我们首先初始化感知器,如下
pr = [1,100]; %设置感知器网络输入向量每个元素的值域
net = newp(pr,1) ;%定义感知器网络
yers{1}.transferFcn = 'logsig' ;%指定感知器神经元的传输函数
其后,开始训练感知器网络和设置训练参数,并将(a)中的训练集输入网络中,
net.trainParam.epochs = 20;训练的最大步长
net.trainParam.goal = 0.1;训练的性能目标值
net.trainParam.show = 2;显示的间隔次数
net.trainParam.Ir = 0.05;学习率
[net,tr] = train(net,p,t);训练,tr为训练次数
save net4161 net; 储存网络
iw1 = net.IW{1};训练后网络的权值阈值(即所求的突触权值)
b1 = net.b{1};训练后网络的阈值
结果如下图所示
本题的答案为:
输入层网络的突触权值分别为:-0.27835,0.092986 ,-2.0044,0.35279
输出层网络的突触权值分别为:1.6957,-3.2632,5.1631,-0.8347
(c)根据以上的网络,我们可以输入测试集进行测试.
p1 = [31 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50];
t1 = [0.0323 0.0313 0.0303 0.0294 0.0286 0.0278 0.0270 0.0263 0.0256 0.0250 0.0244
0.0238 0.0233 0.0227 0.0222 0.0217 0.0213 0.0208 0.0204 0.0200];
hold on
plot(p,t,'*');
load net4161 net;
p2 = 31:50;
r=sim(net,p2);
plot(p,r);
hold off
下图为仿真后的结果:
同理我们可以得到2,3,4题的结果,如下:
log x, 1≤x≤10
2.f(x) =
10
输入层网络的突触权值分别为:-1.4806,-1.3647,-0.30778,0.33517 输出层网络的突触权值分别为:-2.4251,-1.4073,-2.9413,3.3076 3.f(x) = exp(-x) , 1≤x≤10
输入层网络的突触权值分别为:-0.76315,1.1438,-0.4131,-1.6039
输出层网络的突触权值分别为:2.4404,-3.1662,1.0408,-0.66925 4.f(x) = sinx, 0≤x≤π/2
输入层网络的突触权值分别为:-0.21405,-2.1621,0.54138,2.5957 输出层网络的突触权值分别为:-0.07919,-4.1957,0.5531,4.0622
4.17表4-9的数据表示澳大利亚野兔眼睛晶状体的重量为年龄的函数。没有简单的解析函数可以精确插值这些数据,因为我们并没有一个单值函数。相反,利用一个负指数我们有这个数据集的一个非线性最小平方模型,表示为
y = 233.846(1-exp(-0.006042x))+E
其中E是误差项。利用反向传播算法,设计一个多层感知器,它能够为这个数据集提供一个非线形最小平方逼近,与前述的最小平方模型比较你的结果。
解答:由题目我们可以得出如下多层感知器,根据这个感知器我们可以对澳大利亚野兔的晶状体的质量进行逼近,主要代码及结果如下:
1.初始化随机感知层
pr1 = [14 861];设置随机感知器层输入向量每个元素的值域
net1 = newp(pr1,1);定义随机感知器层
net1.inputweights{1}.initFcn = 'rands';指定随机感知器层权值的初始化函数
net1.biases{1}.initFcn = 'rands';指定随机感知器层阈值的初始化函数
net1 = init(net1);初始化随机感知器层
iwl = net1.IW{1}随机感知器层权值向量
b1 = net1.b{1}随机感知器层阈值向量
2.随机感知器层仿真
p1 = [15 15 15 18 28 29 37 37 44 50 50 50 51 54 65 65 72 75 75 82 85 91 91 97 98 125 142 142 147 147 150 159 165 183 192 195 218 218 219 224 225 227 232 232 237 246 258
276 285 300 301 305 312 317 338 347 354 357 375 394 513 535 554 591 648 660 705
723 756 768 860]; 随机感知器层输入向量(训练样本值)
[a1,pf] = sim(net1,p1);随机感知器层仿真
3.初始化第二感知层并进行训练
p2 = [15 15 15 18 28 29 37 37 44 50 50 50 51 54 65 65 72 75 75 82 85 91 91 97 98 125 142 142 147 147 150 159 165 183 192 195 218 218 219 224 225 227 232 232 237 246 258
276 285 300 301 305 312 317 338 347 354 357 375 394 513 535 554 591 648 660 705
723 756 768 860];
net2 = newelm(minmax(p2),[71 1] , {'tansig' 'purelin'},'traingdx');训练为反向传播
net2.trainParam.epochs = 10 ;
net2.trainParam.show = 1;
p2 = ones(2,71);初始化第二层感知器的输入向量
p2 = p2. * a1;前方的仿真结果作为第二层感知器的输入向量
t2=[21.66 22.75 22.30 31.25 44.79 40.55 50.25 46.88 52.03 63.47 61.13 81.00 73.09 79.09
79.51 65.31 71.90 86.10 94.60 92.50 105.00 101.70 102.90 110.00 104.30 134.90
130.68 140.58 155.30 152.20 144.50 142.15 139.81 153.22 145.72 161.10 174.18
173.03 173.54 178.86 177.68 173.73 159.98 161.29 187.07 176.13 183.40 186.26
189.66 186.09 186.70 186.80 195.10 216.41 203.23 188.38 189.70 195.31 202.63
224.82 203.30 209.70 223.90 234.70 244.30 231.00 242.40 230.77 242.57 232.12
246.70];
[net2,tr2] = train(net2,p2,t2);