
哪位高手帮我编写一下关于MATLAB BP神经网络编写正弦函数逼近的问题,不要调用已有的函数。
要求是3层网络,隐层有10个神经元,隐层函数是双曲正切,输出层是线性函数,y=x就可以,输入要求是-1到1之间的4个点,总误差要求小于0。001,最好能还出图来,我编写了...
要求是3层网络,隐层有10个神经元,隐层函数是双曲正切,输出层是线性函数,y=x就可以,输入要求是-1到1之间的4个点,总误差要求小于0。001,最好能还出图来,我编写了一个,,运行不出来,各位高手帮忙看一下,跪谢
w1=rand(10,1);
r1=rand(10,1);
w2=rand(1,10);
r2=rand(1,1);
x=-1:2/39:1;
a=0.1;
b=0.2;
n=0;
E=1;
while n<=100
while E>=0.01
E=0;
for i=1:40
d=sin(x);%期望输出
R=w1*x(i)+r1; %中间层输入输出;
Y=tanh(R);
S=w2*Y+r2; %输出层输入输出;
Z=S;
e2=d(i)-Z;%输出层误差;
D=e2*(1-Y.^2)*w2;
e1=D(:,1);%中间层误差;
w2=w2+a*e2*Y';%输出层权值阈值;
r2=r2+a*e2;
w1=w1+b*e1*x(i);%中间层权值阈值;
r1=r1+b*e1;
e=d(i)-e2;
E=E+0.5*e*e;
end
end
n=n+1;
end
E
n
w1
w2
e1
e2
是-1到1之间的40个点,一维的,样本值40个,单输入,单输出的,要用循环语句,完全是自己的程序,不能用工具箱中的函数,因为财富值没有,不好意思啦,以后会补上的!最好有出正弦函数逼近图的语句 展开
w1=rand(10,1);
r1=rand(10,1);
w2=rand(1,10);
r2=rand(1,1);
x=-1:2/39:1;
a=0.1;
b=0.2;
n=0;
E=1;
while n<=100
while E>=0.01
E=0;
for i=1:40
d=sin(x);%期望输出
R=w1*x(i)+r1; %中间层输入输出;
Y=tanh(R);
S=w2*Y+r2; %输出层输入输出;
Z=S;
e2=d(i)-Z;%输出层误差;
D=e2*(1-Y.^2)*w2;
e1=D(:,1);%中间层误差;
w2=w2+a*e2*Y';%输出层权值阈值;
r2=r2+a*e2;
w1=w1+b*e1*x(i);%中间层权值阈值;
r1=r1+b*e1;
e=d(i)-e2;
E=E+0.5*e*e;
end
end
n=n+1;
end
E
n
w1
w2
e1
e2
是-1到1之间的40个点,一维的,样本值40个,单输入,单输出的,要用循环语句,完全是自己的程序,不能用工具箱中的函数,因为财富值没有,不好意思啦,以后会补上的!最好有出正弦函数逼近图的语句 展开
展开全部
说清楚,几输入,几输出,要出什么图?
我给你编,做那么大的工作量,连个分都不给,你好意思??
clc
clear
close all
load data
%定义网络输入p和期望输出t
input_train=m_data(1:120,1:4)';
output_train=m_data(1:120,5)';
input_test=m_data(121:180,1:4)';
output_test=m_data(121:180,5)';
%建立相应的BP网络
net=newff(minmax(input_train),[9 1],{'tansig','purelin'},'trainlm');
inputWeights=net.IW{1,1};
inputbias=net.b{1};
% 训练网络
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=1000;
net.trainParam.goal=0.0001;
%调用TRAINGDM算法训练BP网络
net=train(net,input_train,output_train);
%对BP网络进行仿真
A=sim(net,input_train);
E=A-output_train;
M=mse(E)
N=sse(E)
%测试网络
a2n=sim(net,input_test);
m=mse(a2n-output_test)
n=sse(a2n-output_test)
%结果作图
%训练曲线
figure(1)
plot(output_train,'r');
hold on
plot(A,'b.:');
legend('训练样本值','BP拟合值');
title('BP网络训练图');
xlabel('样本个数');
%测试曲线
figure(2)
plot(output_test,'r');
hold on
plot(a2n,'b.:');
legend('测试样本值','BP测试值');
title('BP网络预测输出');
xlabel('样本个数');
%训练误差
figure(3)
plot(output_train-A,'-');
title('BP网络训练误差');
legend('训练样本误差');
ylabel('训练绝对误差');
xlabel('样本个数');
grid
%预测误差
figure(4)
plot(output_test-a2n,'-');
title('BP网络预测误差');
legend('测试样本误差');
ylabel('测试绝对误差');
xlabel('样本个数');
grid;
我给你编,做那么大的工作量,连个分都不给,你好意思??
clc
clear
close all
load data
%定义网络输入p和期望输出t
input_train=m_data(1:120,1:4)';
output_train=m_data(1:120,5)';
input_test=m_data(121:180,1:4)';
output_test=m_data(121:180,5)';
%建立相应的BP网络
net=newff(minmax(input_train),[9 1],{'tansig','purelin'},'trainlm');
inputWeights=net.IW{1,1};
inputbias=net.b{1};
% 训练网络
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=1000;
net.trainParam.goal=0.0001;
%调用TRAINGDM算法训练BP网络
net=train(net,input_train,output_train);
%对BP网络进行仿真
A=sim(net,input_train);
E=A-output_train;
M=mse(E)
N=sse(E)
%测试网络
a2n=sim(net,input_test);
m=mse(a2n-output_test)
n=sse(a2n-output_test)
%结果作图
%训练曲线
figure(1)
plot(output_train,'r');
hold on
plot(A,'b.:');
legend('训练样本值','BP拟合值');
title('BP网络训练图');
xlabel('样本个数');
%测试曲线
figure(2)
plot(output_test,'r');
hold on
plot(a2n,'b.:');
legend('测试样本值','BP测试值');
title('BP网络预测输出');
xlabel('样本个数');
%训练误差
figure(3)
plot(output_train-A,'-');
title('BP网络训练误差');
legend('训练样本误差');
ylabel('训练绝对误差');
xlabel('样本个数');
grid
%预测误差
figure(4)
plot(output_test-a2n,'-');
title('BP网络预测误差');
legend('测试样本误差');
ylabel('测试绝对误差');
xlabel('样本个数');
grid;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询