数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 3245|回复: 6

请教BP网络的程序

[复制链接]
发表于 2004-10-7 07:49:42 | 显示全部楼层 |阅读模式
<>我这有一个关于神经网络的程序,哪位能告诉我怎样修改才能保证每次运行的结果是比较符合实际的?我要模拟y=x^2的曲线,可通过模拟后将x=2.5代入进去却得不到6.25,为什么?谢谢!</P>
<>close all
clear
echo on
clc</P>
<>%输入矢量p
P=[-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 ];</P>
<P>%目标矢量
T=[36 25 16 9 4 1 0 1 4 9 16 25 36];</P>
<P>%创建一个新的前向神经网络
%带动量的批处理梯度下降法(TRAINGDM)
net=newff(minmax(P),[20,1],{'logsig','purelin'},'traingdm')</P>
<P>%当前输入层权值和阀值
%inputWeights=net.IW{1,1}
inputWeights=-2.5+5*rand(20)
inputbias=net.b{1}</P>
<P>%当前网络层权值和阀值
layerWeights=net.LW{2,1}
layerbias=net.b{2}</P>
<P>%设置训练参数
net.trainParam.show=200;%每隔50次显示一次
net.trainParam.lr=0.15;%lr表示学习速率
net.trainParam.mc=0.8;%mc表示动量系数
net.trainParam.epochs=100000;
net.trainParam.goal=1e-15;</P>
<P>%调用traingdm算法训练BP网络
[net,tr]=train(net,P,T);</P>
<P>%对BP网络进行仿真
A=sim(net,P)</P>
<P>%计算仿真误差
E=T-A;
MSE=mse(E)</P>
<P>Y=[1 2 2.5 3];</P>
<P>X=sim(net,Y)</P>
<P>%plot(P,A,Y,X,'o')
echo off</P>
发表于 2004-10-7 13:00:26 | 显示全部楼层
<>可能与隐层节点数目,参考一些经验公式,代入不同的h</P>
 楼主| 发表于 2004-10-9 03:38:23 | 显示全部楼层
能不能说得详细点?我变换过节点数,可仍然得不到6.25。但对于学习样本,却都能得到非常精确的解。这是为什么?
发表于 2004-10-10 08:52:57 | 显示全部楼层
<>楼主的那个程序我运行过了,的确是你说的,我查了一些资料,应为是这样的:你应该首先将P和T“归一化”(归一化其实就是一个线性变换,使向量的均值为0,模为1),也将Y归一化,最后还原。我做过BP网络的预测,这样处理是又理论依据的。</P><>这里给一个个定理:</P><>Kolmogorv定理:给定任一连续函数f:f(X)=Y,这里X的每个元素属于闭区间[0,1],f可以精确的用一个三层前向网络实现,次网络 的第一层(输入层)有n个处理单元,中间层有2n+1个处理单元,第三层(输出层)有m个处理单元</P>
 楼主| 发表于 2004-10-18 07:14:46 | 显示全部楼层
<>matlab里面有归一化的程序吗?谢谢</P>
发表于 2004-10-18 08:24:58 | 显示全部楼层
<>归一化其实很容易,就是将模变为1,平均值变为0</P>
发表于 2004-10-18 08:35:35 | 显示全部楼层
malab里面没用过,也不晓得又不有
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 22:28 , Processed in 0.053024 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表