没有合适的资源?快使用搜索试试~ 我知道了~
首页bp神经网络MATLAB程序
bp神经网络MATLAB程序
需积分: 9 32 浏览量
更新于2023-03-16
评论
收藏 95KB DOC 举报
bp神经网络的MATLAB程序 改程序没有使用神经网络工具箱 而是更具神经网络的原理进行的编写
资源详情
资源评论
资源推荐

function main()
clear all;
close all;
K=1;
T=120;
Ts=20;
num=K;
den=[T,1];
G=tf(num,den,'inputdelay',160)
%Transfer function:
% 1
%exp(-160*s) * ---------
% 120 s + 1
Gd=c2d(G,Ts,'zoh') %离散化,采用零阶保持器
%Transfer function:
% 0.1535
%z^(-8) * ---------- Sampling time: 20
%z - 0.8465
[numd,dend]=c2dm(num,den,Ts) %numd = 0 0.1535 dend =1.0000 -0.8465
alldatanum=1000;%所有数据个数
traindatanum=500;%训练数据个数
testdatanum=500;%测试数据个数
%初始化
u=[rands(1,traindatanum) ones(1,testdatanum+20)]; %初始化输入 1*1020 前 500 列是 0~1 随机
数,后 520 列为 1
y=zeros(1,alldatanum+20); %初始化输出 1*1020 所有元素均为 0
for i=10:alldatanum+11
y(i)=-dend(2)*y(i-1)+numd(2)*u(i-9);
end
%构建训练数据队
alldatain=[];
alldataout=[];
for i=10:alldatanum+11
newin=[u(i-9);y(i-1)];
alldatain=[alldatain newin];%输入层为 u(k),y(k+1)
alldataout=[alldataout y(i)];%期望输出 y(k)
end
traindatain=alldatain(:,1:traindatanum);
traindataout=alldataout(:,1:traindatanum);
testdatain=alldatain(:,traindatanum+1:alldatanum);
testdataout=alldataout(:,traindatanum+1:alldatanum);

figure
hold on
grid
j=traindatanum+1:alldatanum
plot(j,testdatain,'k-')
xlabel('input t');
ylabel('output u');
figure
hold on
grid
j=traindatanum+1:alldatanum
plot(j,testdataout,'b-')
xlabel('input t');
ylabel('output y');
indim=2;%输入层神经元个数为 2
outdim=1;%输出层神经元个数为 1
hiddenunitnum=10;%隐含层神经元个数为 10
maxepochs=10000;%设定训练的最大次数
lr=0.001;%设定学习速率
alpha=0.9;%动量项系数
E0=0.00000001;%设定期望误差最小值
%初始化输出层加权系数,隐层加权系数(wki,wij)
w1=0.1*rands(hiddenunitnum,indim);%w1 隐层加权系数
b1=0.1*rands(hiddenunitnum,1);%隐含层阈值
w2=0.1*rands(outdim,hiddenunitnum);%w2 输出层加权系数
b2=0.1*rands(outdim,1);%输出层阈值
w1ex=[w1 b1];
w2ex=[w2 b2];
dw1ex=zeros(size(w1ex));
dw2ex=zeros(size(w2ex));
traindatainex=[traindatain' ones(traindatanum,1)]';
errorhistory=[];
for k=1:maxepochs
hiddenout=logsig(w1ex*traindatainex);
hiddenoutex=[hiddenout' ones(traindatanum,1)]';
networkout=w2ex*hiddenoutex;
error=traindataout-networkout;
SSE=sumsqr(error)

errorhistory=[errorhistory SSE];
if SSE<E0
break;
end
%调整输出层加权系数 w2 和隐含层加权系数 w1
delta2=error;
delta1=w2'*delta2.*hiddenout.*(1-hiddenout);
dw1ex0=lr*dw1ex;
dw2ex0=lr*dw2ex;
dw2ex=delta2*hiddenoutex';
dw1ex=delta1*traindatainex';
w1ex=w1ex+lr*dw1ex+alpha*dw1ex0;
w2ex=w2ex+lr*dw2ex+alpha*dw2ex0;
w2=w2ex(:,1:hiddenunitnum);
end
k
w1=w1ex(:,1:indim)
b1=w1ex(:,indim+1)
w2=w2ex(:,1:hiddenunitnum)
b2=w2ex(:,1+hiddenunitnum)
testhiddenout=logsig(w1*testdatain+repmat(b1,1,testdatanum));
testnnout=w2*testhiddenout+repmat(b2,1,testdatanum);
plot(j,testnnout,'r-')
figure
hold on
grid
[xx,num]=size(errorhistory);
plot(1:num,errorhistory,'r-');
运行结果为:
剩余12页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0