当前位置:文档之家› 基于MATLAB的径向基网络源程序

基于MATLAB的径向基网络源程序

基于MATLAB的径向基网络源程序
基于MATLAB的径向基网络源程序

%一维输入,一维输出,逼近效果很好!

1.基于聚类的RBF 网设计算法

SamNum = 100; % 总样本数

TestSamNum = 101; % 测试样本数

InDim = 1; % 样本输入维数

ClusterNum = 10; % 隐节点数,即聚类样本数

Overlap = 1.0; % 隐节点重叠系数

% 根据目标函数获得样本输入输出

rand('state',sum(100*clock))

NoiseVar = 0.1;

Noise = NoiseVar*randn(1,SamNum);

SamIn = 8*rand(1,SamNum)-4;

SamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2); SamOut = SamOutNoNoise + Noise;

TestSamIn = -4:0.08:4;

TestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2);

figure

hold on

grid

plot(SamIn,SamOut,'k+')

plot(TestSamIn,TestSamOut,'k--')

xlabel('Input x');

ylabel('Output y');

Centers = SamIn(:,1:ClusterNum);

NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号while 1,

NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号

% 按最小距离原则对所有样本进行分类

for i = 1:SamNum

AllDistance = dist(Centers',SamIn(:,i));

[MinDist,Pos] = min(AllDistance);

NumberInClusters(Pos) = NumberInClusters(Pos) + 1;

IndexInClusters(Pos,NumberInClusters(Pos)) = i;

end

% 保存旧的聚类中心

OldCenters = Centers;

for i = 1:ClusterNum

Index = IndexInClusters(i,1:NumberInClusters(i));

Centers(:,i) = mean(SamIn(:,Index)')';

end

% 判断新旧聚类中心是否一致,是则结束聚类

EqualNum = sum(sum(Centers==OldCenters));

if EqualNum == InDim*ClusterNum,

break,

end

end

% 计算各隐节点的扩展常数(宽度)

AllDistances = dist(Centers',Centers); % 计算隐节点数据中心间的距离(矩阵)Maximum = max(max(AllDistances)); % 找出其中最大的一个距离

for i = 1:ClusterNum % 将对角线上的0 替换为较大的值

AllDistances(i,i) = Maximum+1;

end

Spreads = Overlap*min(AllDistances)'; % 以隐节点间的最小距离作为扩展常数

% 计算各隐节点的输出权值

Distance = dist(Centers',SamIn); % 计算各样本输入离各数据中心的距离SpreadsMat = repmat(Spreads,1,SamNum);

HiddenUnitOut = radbas(Distance./SpreadsMat); % 计算隐节点输出阵HiddenUnitOutEx = [HiddenUnitOut' ones(SamNum,1)]'; % 考虑偏移

W2Ex = SamOut*pinv(HiddenUnitOutEx); % 求广义输出权值

W2 = W2Ex(:,1:ClusterNum); % 输出权值

B2 = W2Ex(:,ClusterNum+1); % 偏移

% 测试

TestDistance = dist(Centers',TestSamIn);

TestSpreadsMat = repmat(Spreads,1,TestSamNum);

TestHiddenUnitOut = radbas(TestDistance./TestSpreadsMat);

TestNNOut = W2*TestHiddenUnitOut+B2;

plot(TestSamIn,TestNNOut,'k-')

W2

B2

2.基于梯度法的RBF 网设计算法

SamNum = 100; % 训练样本数

TargetSamNum = 101; % 测试样本数

InDim = 1; % 样本输入维数

UnitNum = 10; % 隐节点数

MaxEpoch = 5000; % 最大训练次数

E0 = 0.9; % 目标误差

% 根据目标函数获得样本输入输出

rand('state',sum(100*clock))

NoiseVar = 0.1;

Noise = NoiseVar*randn(1,SamNum);

SamIn = 8*rand(1,SamNum)-4;

SamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2); SamOut = SamOutNoNoise + Noise;

TargetIn = -4:0.08:4;

TargetOut = 1.1*(1-TargetIn+2*TargetIn.^2).*exp(-TargetIn.^2/2); figure

hold on

grid

plot(SamIn,SamOut,'k+')

plot(TargetIn,TargetOut,'k--')

xlabel('Input x');

ylabel('Output y');

Center = 8*rand(InDim,UnitNum)-4;

SP = 0.2*rand(1,UnitNum)+0.1;

W = 0.2*rand(1,UnitNum)-0.1;

lrCent = 0.001; % 隐节点数据中心学习系数

lrSP = 0.001; % 隐节点扩展常数学习系数

lrW = 0.001; % 隐节点输出权值学习系数

ErrHistory = []; % 用于记录每次参数调整后的训练误差

for epoch = 1:MaxEpoch

AllDist = dist(Center',SamIn);

SPMat = repmat(SP',1,SamNum);

UnitOut = radbas(AllDist./SPMat);

NetOut = W*UnitOut;

Error = SamOut-NetOut;

%停止学习判断

SSE = sumsqr(Error)

% 记录每次权值调整后的训练误差

ErrHistory = [ErrHistory SSE];

if SSE

for i = 1:UnitNum

CentGrad = (SamIn-repmat(Center(:,i),1,SamNum))...

*(Error.*UnitOut(i,:)*W(i)/(SP(i)^2))';

SPGrad = AllDist(i,:).^2*(Error.*UnitOut(i,:)*W(i)/(SP(i)^3))'; WGrad = Error*UnitOut(i,:)';

Center(:,i) = Center(:,i) + lrCent*CentGrad;

SP(i) = SP(i) + lrSP*SPGrad;

W(i) = W(i) + lrW*WGrad;

end

end

% 测试

TestDistance = dist(Center',TargetIn);

TestSpreadsMat = repmat(SP',1,TargetSamNum);

TestHiddenUnitOut = radbas(TestDistance./TestSpreadsMat); TestNNOut = W*TestHiddenUnitOut;

plot(TargetIn,TestNNOut,'k-')

% 绘制学习误差曲线

figure

hold on

grid

[xx,Num] = size(ErrHistory);

plot(1:Num,ErrHistory,'k-');

3.基于OLS 的RBF 网设计算法

SamNum = 100; % 训练样本数

TestSamNum = 101; % 测试样本数

SP = 0.6; % 隐节点扩展常数

ErrorLimit = 0.9; % 目标误差

% 根据目标函数获得样本输入输出

rand('state',sum(100*clock))

NoiseVar = 0.1;

Noise = NoiseVar*randn(1,SamNum);

SamIn = 8*rand(1,SamNum)-4;

SamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2); SamOut = SamOutNoNoise + Noise;

TestSamIn = -4:0.08:4;

TestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2); figure

hold on

grid

plot(SamIn,SamOut,'k+')

plot(TestSamIn,TestSamOut,'k--')

xlabel('Input x');

ylabel('Output y');

[InDim,MaxUnitNum] = size(SamIn); % 样本输入维数和最大允许隐节点数% 计算隐节点输出阵

Distance = dist(SamIn',SamIn);

HiddenUnitOut = radbas(Distance/SP);

PosSelected = [];

VectorsSelected = [];

HiddenUnitOutSelected = [];

ErrHistory = []; % 用于记录每次增加隐节点后的训练误差VectorsSelectFrom = HiddenUnitOut;

dd = sum((SamOut.*SamOut)')';

for k = 1 : MaxUnitNum

% 计算各隐节点输出矢量与目标输出矢量的夹角平方值

PP = sum(VectorsSelectFrom.*VectorsSelectFrom)';

Denominator = dd * PP';

[xxx,SelectedNum] = size(PosSelected);

if SelectedNum>0,

[lin,xxx] = size(Denominator);

Denominator(:,PosSelected) = ones(lin,1);

end

Angle = ((SamOut*VectorsSelectFrom) .^ 2) ./ Denominator;

% 选择具有最大投影的矢量,得到相应的数据中心

[value,pos] = max(Angle);

PosSelected = [PosSelected pos];

% 计算RBF 网训练误差

HiddenUnitOutSelected = [HiddenUnitOutSelected; HiddenUnitOut(pos,:)]; HiddenUnitOutEx = [HiddenUnitOutSelected; ones(1,SamNum)];

W2Ex = SamOut*pinv(HiddenUnitOutEx); % 用广义逆求广义输出权值

W2 = W2Ex(:,1:k); % 得到输出权值

B2 = W2Ex(:,k+1); % 得到偏移

NNOut = W2*HiddenUnitOutSelected+B2; % 计算RBF 网输出

SSE = sumsqr(SamOut-NNOut)

% 记录每次增加隐节点后的训练误差

ErrHistory = [ErrHistory SSE];

if SSE < ErrorLimit, break, end

% 作Gram-Schmidt 正交化

NewVector = VectorsSelectFrom(:,pos);

ProjectionLen = NewVector' * VectorsSelectFrom / (NewVector'*NewVector); VectorsSelectFrom = VectorsSelectFrom - NewVector * ProjectionLen;

end

UnitCenters = SamIn(PosSelected);%%%%%%%%%%%

% 测试

TestDistance = dist(UnitCenters',TestSamIn);%%%%%%%% TestHiddenUnitOut = radbas(TestDistance/SP);

TestNNOut = W2*TestHiddenUnitOut+B2;

plot(TestSamIn,TestNNOut,'k-')

k

UnitCenters

W2

B2

人工神经网络Matlab实现代码

以下是用Matlab中的m语言编写的BP神经网络代码,实现的是一个正弦函数的拟合过程,包括了初始化、BP算法、绘制曲线等过程,可以将代码放到一个M文件中运行,以下是代码: defaultpoints=20; %%%%%%%%%隐含层节点数 inputpoints=1; %%%%%%%%%输入层节点数 outputpoints=1; %%%%%%%%%输出层节点数 Testerror=zeros(1,100);%%%%每个测试点的误差记录 a=zeros(1,inputpoints);%%%%输入层节点值 y=zeros(1,outputpoints);%%%样本节点输出值 w=zeros(inputpoints,defaultpoints);%%%%%输入层和隐含层权值 %初始化权重很重要,比如用rand函数初始化则效果非常不确定,不如用zeros初始化 v=zeros(defaultpoints,outputpoints);%%%%隐含层和输出层权值 bin=rand(1,defaultpoints);%%%%%隐含层输入 bout=rand(1,defaultpoints);%%%%隐含层输出 base1=0*ones(1,defaultpoints);%隐含层阈值,初始化为0 cin=rand(1,outputpoints);%%%%%%输出层输入 cout=rand(1,outputpoints);%%%%%输出层输出 base2=0*rand(1,outputpoints);%%输出层阈值 error=zeros(1,outputpoints);%%%拟合误差 errors=0;error_sum=0; %%%误差累加和 error_rate_cin=rand(defaultpoints,outputpoints);%%误差对输出层节点权值的导数 error_rate_bin=rand(inputpoints,defaultpoints);%%%误差对输入层节点权值的导数 alfa=0.5; %%%% alfa 是隐含层和输出层权值-误差变化率的系数,影响很大 belt=0.5; %%%% belt 是隐含层和输入层权值-误差变化率的系数,影响较小 gama=5; %%%% gama 是误差放大倍数,可以影响跟随速度和拟合精度,当gama大于2时误差变大,容易震荡 %%%%规律100个隐含节点,当alfa *gama =1.5时,效果好,其他值误差变大,belt基本不影响效果 %%%%规律200个隐含节点,当alfa *gama =0.7时,效果好,其他值误差变大,belt基本不影响效果,最小误差和100个隐含点一样 %%%%规律50个隐含节点,当alfa *gama =3时,效果好,其他值误差变大,belt基本不影响效果,最小误差和100个隐含点一样 trainingROUND=200;% 训练次数,有时训练几十次比训练几百次上千次效果要好很多sampleNUM=361; % 样本点数 x1=zeros(sampleNUM,inputpoints); %样本输入矩阵 y1=zeros(sampleNUM,outputpoints); %样本输出矩阵 x2=zeros(sampleNUM,inputpoints); %测试输入矩阵

基于MATLAB的径向基网络源程序

%一维输入,一维输出,逼近效果很好! 1.基于聚类的RBF 网设计算法 SamNum = 100; % 总样本数 TestSamNum = 101; % 测试样本数 InDim = 1; % 样本输入维数 ClusterNum = 10; % 隐节点数,即聚类样本数 Overlap = 1.0; % 隐节点重叠系数 % 根据目标函数获得样本输入输出 rand('state',sum(100*clock)) NoiseVar = 0.1; Noise = NoiseVar*randn(1,SamNum); SamIn = 8*rand(1,SamNum)-4; SamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2); SamOut = SamOutNoNoise + Noise; TestSamIn = -4:0.08:4; TestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2); figure hold on grid plot(SamIn,SamOut,'k+') plot(TestSamIn,TestSamOut,'k--') xlabel('Input x'); ylabel('Output y'); Centers = SamIn(:,1:ClusterNum); NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号while 1, NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号 % 按最小距离原则对所有样本进行分类 for i = 1:SamNum AllDistance = dist(Centers',SamIn(:,i)); [MinDist,Pos] = min(AllDistance); NumberInClusters(Pos) = NumberInClusters(Pos) + 1; IndexInClusters(Pos,NumberInClusters(Pos)) = i; end % 保存旧的聚类中心

BP神经网络的数据分类MATLAB源代码.doc

%%%清除空间 clc clear all ; close all ; %%%训练数据预测数据提取以及归一化 %%%下载四类数据 load data1 c1 load data2 c2 load data3 c3 load data4 c4 %%%%四个特征信号矩阵合成一个矩阵data ( 1:500 , : ) = data1 ( 1:500 , :) ; data ( 501:1000 , : ) = data2 ( 1:500 , : ) ; data ( 1001:1500 , : ) = data3 ( 1:500 , : ) ; data ( 1501:2000 , : ) = data4 ( 1:500 , : ) ; %%%%%%从1到2000间的随机排序 k = rand ( 1 , 2000 ) ; [ m , n ] = sort ( k ) ; %%m为数值,n为标号

%%%%%%%%%%%输入输出数据 input = data ( : , 2:25 ) ; output1 = data ( : , 1) ; %%%%%%把输出从1维变到4维 for i = 1 : 1 :2000 switch output1( i ) case 1 output( i , :) = [ 1 0 0 0 ] ; case 2 output( i , :) = [ 0 1 0 0 ] ; case 3 output( i , :) = [ 0 0 1 0 ] ; case 4 output( i , :) = [ 0 0 0 1 ] ; end end %%%%随机抽取1500个样本作为训练样本,500个样本作为预测样本 input_train = input ( n( 1:1500 , : ) )’ ; output_train = output ( n( 1:1500 , : ) )’ ; input_test = input ( n( 1501:2000 , : ) )’ ;

基于遗传算法的BP神经网络MATLAB代码

用遗传算法优化BP神经网络的Matlab编程实例(转) 由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。 程序一:GA训练BP权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络 %-------------------------------------------------------------------------- %数据归一化预处理 nntwarn off XX=[1:19;2:20;3:21;4:22]'; YY=[1:4]; XX=premnmx(XX); YY=premnmx(YY); YY %创建网络 net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},'tra inlm'); %下面使用遗传算法对网络进行优化 P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 aa=ones(S,1)*[-1,1]; popu=50;%种群规模 save data2 XX YY % 是将 xx,yy 二个变数的数值存入 data2 这个MAT-file,initPpp=initializega(popu,aa,'gabpEval');%初始化种群 gen=100;%遗传代数

BP神经网络matlab源程序代码

close all clear echo on clc % NEWFF——生成一个新的前向神经网络 % TRAIN——对 BP 神经网络进行训练 % SIM——对 BP 神经网络进行仿真 % 定义训练样本 % P为输入矢量 P=[0.7317 0.6790 0.5710 0.5673 0.5948;0.6790 0.5710 0.5673 0.5948 0.6292; ... 0.5710 0.5673 0.5948 0.6292 0.6488;0.5673 0.5948 0.6292 0.6488 0.6130; ... 0.5948 0.6292 0.6488 0.6130 0.5654; 0.6292 0.6488 0.6130 0.5654 0.5567; ... 0.6488 0.6130 0.5654 0.5567 0.5673;0.6130 0.5654 0.5567 0.5673 0.5976; ... 0.5654 0.5567 0.5673 0.5976 0.6269;0.5567 0.5673 0.5976 0.6269 0.6274; ... 0.5673 0.5976 0.6269 0.6274 0.6301;0.5976 0.6269 0.6274 0.6301 0.5803; ... 0.6269 0.6274 0.6301 0.5803 0.6668;0.6274 0.6301 0.5803 0.6668 0.6896; ... 0.6301 0.5803 0.6668 0.6896 0.7497]; % T为目标矢量 T=[0.6292 0.6488 0.6130 0.5654 0.5567 0.5673 0.5976 ... 0.6269 0.6274 0.6301 0.5803 0.6668 0.6896 0.7497 0.8094]; % Ptest为测试输入矢量 Ptest=[0.5803 0.6668 0.6896 0.7497 0.8094;0.6668 0.6896 0.7497 0.8094 0.8722; ... 0.6896 0.7497 0.8094 0.8722 0.9096]; % Ttest为测试目标矢量 Ttest=[0.8722 0.9096 1.0000]; % 创建一个新的前向神经网络 net=newff(minmax(P'),[12,1],{'logsig','purelin'},'traingdm'); % 设置训练参数 net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.mc = 0.9; net.trainParam.epochs = 5000; net.trainParam.goal = 0.001; % 调用TRAINGDM算法训练 BP 网络 [net,tr]=train(net,P',T); % 对BP网络进行仿真 A=sim(net,P'); figure; plot((1993:2007),T,'-*',(1993:2007),A,'-o'); title('网络的实际输出和仿真输出结果,*为真实值,o为预测值'); xlabel('年份'); ylabel('客运量'); % 对BP网络进行测试 A1=sim(net,Ptest');

基于matlab实现BP神经网络模型仿真

基于BP神经网络模型及改进模型对全国历年车祸次数预测 一、背景 我国今年来随着经济的发展,汽车需求量不断地增加,所以全国每年的车祸次数也被越来越被关注,本文首先搜集全国历年车祸次数,接着通过这些数据利用BP神经网络模型和改进的径向基函数网络进行预测,最后根据预测结果,分析模型的优劣,从而达到深刻理解BP神经网络和径向基函数网络的原理及应用。所用到的数据即全国历年车祸次数来自中国汽车工业信息网,网址如下: https://www.doczj.com/doc/0f12644762.html,/autoinfo_cn/cszh/gljt/qt/webinfo/2006/05/124650 1820021204.htm 制作历年全国道路交通事故统计表如下所示: 二、问题研究 (一)研究方向 (1)通过数据利用BP神经网络模型预测历年全国交通事故次数并与实际值进行比较。(2)分析BP神经网络模型改变训练函数再进行仿真与之前结果进行对比。 (3)从泛化能力和稳定性等方面分析BP神经网络模型的优劣。 (4)利用径向基函数网络模型进行仿真,得到结果与采用BP神经网络模型得到的结果进行比较。

(二)相关知识 (1)人工神经网络 人工神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)和之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。 人工神经网络有以下几个特征: (1)非线性非线性关系是自然界的普遍特性。大脑的智慧就是一种非线性现象。人工神经元处于激活或抑制二种不同的状态,这种行为在数学上表现为一种非线性网络关系。具有阈值的神经元构成的网络具有更好的性能,可以提高容错性和存储容量。 (2)非局限性一个神经网络通常由多个神经元广泛连接而成。一个系统的整体行为不仅取决于单个神经元的特征,而且可能主要由单元之间的相互作用、相互连接所决定。通过单元之间的大量连接模拟大脑的非局限性。联想记忆是非局限性的典型例子。 (3)非常定性人工神经网络具有自适应、自组织、自学习能力。神经网络不但处理的信息可以有各种变化,而且在处理信息的同时,非线性动力系统本身也在不断变化。经常采用迭代过程描写动力系统的演化过程。 (4)非凸性一个系统的演化方向,在一定条件下将取决于某个特定的状态函数。例如能量函数,它的极值相应于系统比较稳定的状态。非凸性是指这种函数有多个极值,故系统具有多个较稳定的平衡态,这将导致系统演化的多样性。 (2)BP神经网络模型 BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。 (3)径向基函数网络模型 径向基函数(Radial Basis Function,RBF)神经网络由三层组成,输入层节点只传递输入信号到隐层,隐层节点由像高斯函数那样的辐射状作用函数构成,而输出层节点通常是简单的线性函数。 隐层节点中的作用函数(基函数)对输入信号将在局部产生响应,也就是说,当输入信号靠近基函数的中央范围时,隐层节点将产生较大的输出,由此看出这种网络具有局部逼近能力,所以径向基函数网络也称为局部感知场网络。

BP神经网络MATLAB代码

BP神经网络matlab代码 p=[284528334488;283344884554;448845542928;455429283497;29283497 2261;... 349722616921;226169211391;692113913580;139135804451;35804451 2636;... 445126363471;263634713854;347138543556;385435562659;35562659 4335;... 265943352882;433528824084;433528821999;288219992889;19992889 2175;... 288921752510;217525103409;251034093729;340937293489;37293489 3172;... 348931724568;317245684015;]'; %====期望输出======= t=[4554292834972261692113913580445126363471385435562659... 4335288240841999288921752510340937293489317245684015... 3666]; ptest=[284528334488;283344884554;448845542928;455429283497;29283497 2261;... 349722616921;226169211391;692113913580;139135804451;35804451 2636;... 445126363471;263634713854;347138543556;385435562659;35562659 4335;... 265943352882;433528824084;433528821999;288219992889;19992889 2175;... 288921752510;217525103409;251034093729;340937293489;37293489 3172;... 348931724568;317245684015;456840153666]'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%将数据归一化 NodeNum1=20;%隐层第一层节点数 NodeNum2=40;%隐层第二层节点数 TypeNum=1;%输出维数 TF1='tansig'; TF2='tansig'; TF3='tansig'; net=newff(minmax(pn),[NodeNum1,NodeNum2,TypeNum],{TF1TF2 TF3},'traingdx');

BP神经网络matlab源程序代码

BP神经网络matlab源程序代码) %******************************% 学习程序 %******************************% %======原始数据输入======== p=[2845 2833 4488;2833 4488 4554;4488 4554 2928;4554 2928 3497;2928 3497 2261;... 3497 2261 6921;2261 6921 1391;6921 1391 3580;1391 3580 4451;3580 4451 2636;... 4451 2636 3471;2636 3471 3854;3471 3854 3556;3854 3556 2659;3556 2659 4335;... 2659 4335 2882;4335 2882 4084;4335 2882 1999;2882 1999 2889;1999 2889 2175;... 2889 2175 2510;2175 2510 3409;2510 3409 3729;3409 3729 3489;3729 3489 3172;... 3489 3172 4568;3172 4568 4015;]'; %===========期望输出======= t=[4554 2928 3497 2261 6921 1391 3580 4451 2636 3471 3854 3556 2659 ... 4335 2882 4084 1999 2889 2175 2510 3409 3729 3489 3172 4568 4015 ... 3666]; ptest=[2845 2833 4488;2833 4488 4554;4488 4554 2928;4554 2928 3497;2928 3497 2261;... 3497 2261 6921;2261 6921 1391;6921 1391 3580;1391 3580 4451;3580 4451 2636;... 4451 2636 3471;2636 3471 3854;3471 3854 3556;3854 3556 2659;3556 2659 4335;... 2659 4335 2882;4335 2882 4084;4335 2882 1999;2882 1999 2889;1999 2889 2175;... 2889 2175 2510;2175 2510 3409;2510 3409 3729;3409 3729 3489;3729 3489 3172;... 3489 3172 4568;3172 4568 4015;4568 4015 3666]'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %将数据归一化 NodeNum1 =20; % 隐层第一层节点数 NodeNum2=40; % 隐层第二层节点数 TypeNum = 1; % 输出维数 TF1 = 'tansig';

径向基RBF神经网络模型

2.径向基RBF 神经网络预测模型 RBF 网络是一种新颖的有效的前向型神经网络,由于该网络输出层对中间层的线性加权,使得该网络避免了像BP 网络那样繁琐冗长的计算,具有较高的运算速度和外推能力,同时使得网络有较强的非线性映射功能,RBF 网络是通过非线性基函数的线性组合实现从输入空间N R 到输出空间M R 的非线性转换。而本题数据是一类非线性较强的时间序列,对其进行预测,即从前N 个数据中预测将来M 个数据,实质上就是找出从N R 到M R 的非线性映射关系。因此,可以说径向基网络特别适合于非线性时间序列的预测。 2.1 RBF 网络结构及算法 1、网络的神经元结构 2、激活函数采用径向基函数 (1)以输入和权值向量之间的距离作为自变量 RBF 网络的输出是隐单元输出的线性加权和,学习速度加快;径向基神经网络使用径向基函数(一般使用高斯函数)作为激活函数,神经元输入空间区域很小,因此需要更多的径向基神经元 。 自组织选取中心学习方法有: 第一步,自组织学习阶段无导师学习过程,求解隐含层基函数的中 · · · x 1 x m x 2 2 -dist R (dist )=e

心与方差; 第二步,有导师学习阶段求解隐含层到输出层之间的权值。 高斯函数作为径向基函数 网络的输出 设d 是样本的期望输出值,那么基函数的方差可表示为 : 2.求解方差 RBF 神经网络的基函数为高斯函数时,方差可由下式求解: 式中 为中所选取中心之间的最大距离。 3.计算隐含层和输出层之间的权值 隐含层至输出层之间神经元的连接权值可以用最小二乘法直接计算得到,计算公式如下: 2 2 1R()=exp(-) 2p i p i c c σ--x x h 2 2 i=11y =exp(-) =1,2,,2j ij p i w c j n σ-∑L x 2 1m j j i j d y c P σ=- ∑1,2,i i h σ= =L max c 2 2max exp( ) 1,2,,;1,2,,p i h w x c p P i h c =-==L L

BP神经网络matlab代码 (1)

%======原始数据输入======== p=[284528334488;283344884554;448845542928;455429283497;29283497 2261;... 349722616921;226169211391;692113913580;139135804451;35804451 2636;... 445126363471;263634713854;347138543556;385435562659;35562659 4335;... 265943352882;433528824084;433528821999;288219992889;19992889 2175;... 288921752510;217525103409;251034093729;340937293489;37293489 3172;... 348931724568;317245684015;]'; %期望输出 t=[4554292834972261692113913580445126363471385435562659... 4335288240841999288921752510340937293489317245684015... 3666]; pt=[284528334488;283344884554;448845542928;455429283497;29283497 2261;... 349722616921;226169211391;692113913580;139135804451;35804451 2636;... 445126363471;263634713854;347138543556;385435562659;35562659 4335;... 265943352882;433528824084;433528821999;288219992889;19992889 2175;... 288921752510;217525103409;251034093729;340937293489;37293489 3172;... 348931724568;317245684015;456840153666]';%测试输入数据 tt=[………];%测试输出数据 [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%将数据归一化 NodeNum1=12;%隐层节点 TypeNum=1;%输出节点 TF1='tansig'; TF2='tansig'; net=newff(minmax(pn),[NodeNum1,TypeNum],{TF1 TF2},'traingdx'); inputWeights=net.IW{1,1};%第一层权值输出

bp神经网络及matlab实现

bp神经网络及matlab实现 分类:算法学习2012-06-20 20:56 66399人阅读评论(28) 收藏举报网络matlab算法functionnetworkinput 本文主要内容包括:(1) 介绍神经网络基本原理,(2) https://www.doczj.com/doc/0f12644762.html,实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法。 第0节、引例 本文以Fisher的Iris数据集作为神经网络程序的测试数据集。Iris数据集可以在https://www.doczj.com/doc/0f12644762.html,/wiki/Iris_flower_data_set 找到。这里简要介绍一下Iris数据集: 有一批Iris花,已知这批Iris花可分为3个品种,现需要对其进行分类。不同品种的Iris花的花萼长度、花萼宽度、花瓣长度、花瓣宽度会有差异。我们现有一批已知品种的Iris花的花萼长度、花萼宽度、花瓣长度、花瓣宽度的数据。 一种解决方法是用已有的数据训练一个神经网络用作分类器。 如果你只想用C#或Matlab快速实现神经网络来解决你手头上的问题,或者已经了解神经网络基本原理,请直接跳到第二节——神经网络实现。 第一节、神经网络基本原理 1. 人工神经元( Artificial Neuron )模型 人工神经元是神经网络的基本元素,其原理可以用下图表示:

图1. 人工神经元模型 图中x1~xn是从其他神经元传来的输入信号,wij表示表示从神经元j到神经元i的连接权值,θ表示一个阈值( threshold ),或称为偏置( bias )。则神经元i的输出与输入的关系表示为: 图中yi表示神经元i的输出,函数f称为激活函数 ( Activation Function )或转移函数( Transfer Function ) ,net称为净激活(net activation)。若将阈值看成是神经元i的一个输入x0的权重wi0,则上面的式子可以简化为: 若用X表示输入向量,用W表示权重向量,即: X = [ x0 , x1 , x2 , ....... , xn ]

BP神经网络的设计实例MATLAB编程

神经网络的设计实例(MATLAB编程) 例1 采用动量梯度下降算法训练BP 网络。 训练样本定义如下: 输入矢量为 p =[-1 -2 3 1 -1 1 5 -3] 目标矢量为t = [-1 -1 1 1] 解:本例的MATLAB 程序如下: close all clear echo on clc % NEWFF——生成一个新的前向神经网络 % TRAIN——对BP 神经网络进行训练 % SIM——对BP 神经网络进行仿真 pause % 敲任意键开始 clc % 定义训练样本 P=[-1, -2, 3, 1; -1, 1, 5, -3]; % P 为输入矢量 T=[-1, -1, 1, 1]; % T 为目标矢量 pause; clc % 创建一个新的前向神经网络 net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm') % 当前输入层权值和阈值 inputWeights=net.IW{1,1} inputbias=net.b{1} % 当前网络层权值和阈值 layerWeights=net.LW{2,1} layerbias=net.b{2} pause clc % 设置训练参数 net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.mc = 0.9; net.trainParam.epochs = 1000; net.trainParam.goal = 1e-3; pause clc % 调用TRAINGDM 算法训练BP 网络 [net,tr]=train(net,P,T);

径向基函数神经网络.docx

径向基函数神经网络模型与学习算法 1985年,Powell提出了多变量插值的径向基丙数(Radical Basis Function, RBF)方法。1988 年,Moody 和Darken 提出了一种神经网络结构,即RBF 神经网络,属于前向神经网络类型,它能够以任意精度逼近任意连续函数,特别适合于解决分类问题。 RBF网络的结构与多层前向网络类似,它是一种三层前向网络。输入层由信号源结点组成;第二层为隐含层,隐单元数视所描述问题的需要而定,隐单元的变换函数RBFO是对中心点径向对称且衰减的非负非线性函数;第三层为输出层,它对输入模式的作用作出响应。从输入空间到隐含层空间的变换是非线性的,而从隐含层空间的输出层空间变换是线性的。 RBF网络的基本思想是:用RBF作为隐单元的“基”构成隐含层空间,这样就可以将输入矢量直接(即不需要通过权接)映射到隐空间。当RBF的屮心点确定以后,这种映射关系也就确定了。而隐含层空间到输出空间的映射是线性的,即网络的输出是隐单元输出的线性加权和。此处的权即为网络可调参数。由此可见,从总体上看,网络市输入到输出的映射是非线性的,而网络输出对叮调参数而言却又是线性的。这样网络的权就可由线性方程直接解岀,从而大大加快学习速度并避免局部极小问题。 1.1RBF神经网络模型 径向基神经网络的神经元结构如图1所示。径向基神经网络的激活函数采用径向基函数,通常定义为空间任一点到某一中心之间欧氏距离的单调函数。由图1所示的径向基神经元结构可以看出,径向基神经网络的激活函数是以输入向量和权值向量之间的距离||dist||作为自变量的。径向基神经网络的

激活函数的一般表达式为 /?(||dist||)= e~yist^(1) 图1径向基神经元模型 随着权值和输入向量之间距离的减少,网络输出是递增的,当输入向量和权值向量一致时,神经元输出1。在图1中的b为阈值,用于调整神经元的灵敏度。利用径向基神经元和线性神经元可以建立广义回归神经网络,该种神经网络适用于函数逼近方面的应用;径向基神经元和竞争神经元可以组建概率神经网络,此种神经网络适用于解决分类问题。 由输入层、隐含层和输岀层构成的一般径向基神经网络结构如图2所示。在RBF网络中,输入层仅仅起到传输信号的作用,与前面所讲述的神经网络相比较,输入层和隐含层之间可以看做连接权值为1 的连接。输出层和隐含层所完成的任务是不同的,因而它们的学习策略也不相同。输岀层是对线性权进行调整,采用的是线性优化策略。因而学习速度较快。而隐含层是对激活函数(格林函数或高斯函数,一般取高斯)的参数进行调整,采用的是非线性优化策略,因而学习速度较慢。

Matlab神经网络30个案例第1案例代码

%% 清空环境变量 clc clear %% 训练数据预测数据提取及归一化 %下载四类语音信号 load data1 c1 load data2 c2 load data3 c3 load data4 c4 %四个特征信号矩阵合成一个矩阵 data(1:500,:)=c1(1:500,:); data(501:1000,:)=c2(1:500,:); data(1001:1500,:)=c3(1:500,:); data(1501:2000,:)=c4(1:500,:); %从1到2000间随机排序 k=rand(1,2000); [m,n]=sort(k); %输入输出数据 input=data(:,2:25); output1 =data(:,1); %把输出从1维变成4维 for i=1:2000 switch output1(i) case 1 output(i,:)=[1 0 0 0]; case 2 output(i,:)=[0 1 0 0]; case 3 output(i,:)=[0 0 1 0]; case 4 output(i,:)=[0 0 0 1]; end end %随机提取1500个样本为训练样本,500个样本为预测样本input_train=input(n(1:1500),:)'; output_train=output(n(1:1500),:)'; input_test=input(n(1501:2000),:)';

output_test=output(n(1501:2000),:)'; %输入数据归一化 [inputn,inputps]=mapminmax(input_train); %% 网络结构初始化 innum=24; midnum=25; outnum=4; %权值初始化 w1=rands(midnum,innum); b1=rands(midnum,1); w2=rands(midnum,outnum); b2=rands(outnum,1); w2_1=w2;w2_2=w2_1; w1_1=w1;w1_2=w1_1; b1_1=b1;b1_2=b1_1; b2_1=b2;b2_2=b2_1; %学习率 xite=0.1 alfa=0.01; %% 网络训练 for ii=1:10 E(ii)=0; for i=1:1:1500 %% 网络预测输出 x=inputn(:,i); % 隐含层输出 for j=1:1:midnum I(j)=inputn(:,i)'*w1(j,:)'+b1(j); Iout(j)=1/(1+exp(-I(j))); end % 输出层输出 yn=w2'*Iout'+b2; %% 权值阀值修正 %计算误差 e=output_train(:,i)-yn; E(ii)=E(ii)+sum(abs(e));

BP算法及径向基函数网络

BP 算法及径向基函数网络 B0503194班 高翔 1050319110 杨柳青 1050319113 题目1: 2.5 利用BP 算法及Sigmoid 算法,研究以下各函数的逼近问题: (1) 1 () , 1x 100f x x = ≤≤ (2) 10()log x , 1x 10f x =≤≤ (3) ()exp() , 1x 10f x x =-≤≤ (4) ()sin , 1x 2 f x x π =≤≤ 解:该题可以采用BP 神经网络或者是径向基函数网络来解决,首先给出我们利用BP 网络的解决方法,关于如何利用径向基函数网络来解决问题,放在2.6 题中的通过径向基函数网络解决XOR 问题一起讨论。 一、 概述 人工神经网络作为一门20世纪中叶起步的新技术,随着其理论的逐步完善,其应用日益广泛,应用领域也在不断拓展,已经在各个工程领域里得到了广泛的应用。通常神经网络技术主要应用在以下方面。 模式信息处理和模式识别。 最优化问题计算。 信息的智能化处理。 复杂控制。 信号处理。 在1959年,当时的两位美国工程师B.Widrow 和M.Hoff 提出了自适应线形元件。在 1969年,人工智能的创始人之一M.Minsky 和S.Papert 指出单层感知器只能够进行线形分类,对线形不可分的输入模式,哪怕是简单的异或逻辑运算,单层感知器也无能为力,而解决其的唯一方法就是设计训练出具有隐含层的多层神经网络。这一难题在1986年得到了解决。 1986年,D.E. Rumelhart 等人提出解决多层神经网络权值修正的算法——误差反向传播法(Error Back-Propagation )。这种算法也通常被应用在BP (Back-Propagation Network )中。 在目前,在人工神经网络的实际应用中,绝大部分的神经网络模型(80%--90%)是采

(完整版)BP神经网络matlab实例(简单而经典)

p=p1';t=t1'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化 net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络net.trainParam.show=2000; % 训练网络 net.trainParam.lr=0.01; net.trainParam.epochs=100000; net.trainParam.goal=1e-5; [net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP 网络 pnew=pnew1'; pnewn=tramnmx(pnew,minp,maxp); anewn=sim(net,pnewn); %对BP网络进行仿真 anew=postmnmx(anewn,mint,maxt); %还原数据 y=anew'; 1、BP网络构建 (1)生成BP网络 = net newff PR S S SNl TF TF TFNl BTF BLF PF (,[1 2...],{ 1 2...},,,) PR:由R维的输入样本最小最大值构成的2 R?维矩阵。 S S SNl:各层的神经元个数。 [ 1 2...] { 1 2...} TF TF TFNl:各层的神经元传递函数。 BTF:训练用函数的名称。 (2)网络训练 [,,,,,] (,,,,,,) = net tr Y E Pf Af train net P T Pi Ai VV TV (3)网络仿真 = [,,,,] (,,,,) Y Pf Af E perf sim net P Pi Ai T {'tansig','purelin'},'trainrp'

matlab 通用神经网络代码

matlab 通用神经网络代码 学习了一段时间的神经网络,总结了一些经验,在这愿意和大家分享一下, 希望对大家有帮助,也希望大家可以把其他神经网络的通用代码在这一起分享 感应器神经网络、线性网络、BP神经网络、径向基函数网络 %通用感应器神经网络。 P=[ -40; 1 50];%输入向量 T=[1 1 0 0 1];%期望输出 plotpv(P,T);%描绘输入点图像 net=newp([-40 1;-1 50],1);%生成网络,其中参数分别为输入向量的范围和神经元感应器数量hold on linehandle=plotpc{1},{1}); a=1:25%训练次数 [net,Y,E]=adapt(net,P,T); linehandle=plotpc{1},{1},linehandle); drawnow; end %通用newlin程序 %通用线性网络进行预测 time=0::5; T=sin(time*4*pi); Q=length(T);

P=zeros(5,Q);%P中存储信号T的前5(可变,根据需要而定)次值,作为网络输入。P(1,2:Q)=T(1,1:(Q-1)); P(2,3:Q)=T(1,1:(Q-2)); P(3,4:Q)=T(1,1:(Q-3)); P(4,5:Q)=T(1,1:(Q-4)); P(5,6:Q)=T(1,1:(Q-5)); plot(time,T)%绘制信号T曲线 xlabel('时间'); ylabel('目标信号'); title('待预测信号'); net=newlind(P,T);%根据输入和期望输出直接生成线性网络 a=sim(net,P);%网络测试 figure(2) plot(time,a,time,T,'+') xlabel('时间'); ylabel('输出-目标+'); title('输出信号和目标信号'); e=T-a; figure(3) plot(time,e) hold on plot([min(time) max(time)],[0 0],'r:')%可用plot(x,zeros(size(x)),'r:')代替 hold off xlabel('时间'); ylabel('误差'); title('误差信号');

相关主题
文本预览
相关文档 最新文档