线性神经网络在Matlab中实现

来源:互联网 发布:mongodb删除数据 编辑:程序博客网 时间:2024/06/05 17:25

线性神经网络的神经元传递函数是线性函数,因此输出可以是任意值,感知器的输出只能是0或1

一、神经元结构


二、学习函数

1、newlind--设计一个线性层

net=newlind(P,T) 

返回的net已经训练完毕, P输入向量,T输出向量

2、newlin--创建未经训练的线性层

net=newlin(P,S,ID,LR)

P输入向量,S输出节点个数,ID输入延迟时间,LR学习率,默认0.01

3、learnwh--LMS学习函数

4、maxlinlr--计算最大学习速率

三、Matlab实现

1、newlind用于最小二乘拟合

x=-5:5;y=3*x-7;randn('state',2);   % 随机数种子,便于重复生成同样的随机数y=y+randn(1,length(y))*1.5; % 加入噪声的直线plot(x,y,'o');%生成原始数据点P=x;T=y;net=newlind(P,T); %%%%%设计线性神经网络new_x=-5:0.2:5;new_y=sim(net,new_x); %%%%%输出仿真结果hold on;plot(new_x,new_y); %画图像直线legend('原始数据点','最小二乘拟合函数');net.iw %权值net.b %阈值title('newlind用于最小二乘拟合直线');

2、在噪声对消中应用

通过滤波将信号中的噪声去掉

time=0.01:0.01:10;noise=(rand(1,1000)-0.5)*4;input=sin(time); %输入信号p=noise; %将噪声作为神经网络输入量t=input+noise; %将噪声+信号作为目标向量net=newlin([-1 1],1,0,0.0005); %创建线性神经网络net.adaptParam.passes=70;[net,y,output]=adapt(net,p,t)%自适应训练,output作为网络调整过程的误差hold on;subplot(3,1,1)plot(time,input,'r');title('信号波形sin(t)');subplot(3,1,2);plot(time,t,'m');xlabel('t');title('随机噪声波形sin(t)+noise(t)');subplot(3,1,3);plot(time,output,'b');xlabel('t');title('输出信号波形y(t)');

3、信号预测中的应用

clear all;% 定义输入向量和目标向量time=0.5:0.5:20;         %时间变量y=(rand(1,40)-0.5)*4;    %定义随机输入信号p=con2seq(y);            %将随机输入向量转换为串行向量delays=[1 2];            %定义ADALINE神经元输入延迟量t=p;                     %定义ADALINE神经元的数目向量net=newlin(minmax(y),1,delays,0.0005);%%%% 创建线性神经网络net.adaptParam.passes=70;%%%%% 线性神经网络的自适应调整(训练)[net,a,output]=adapt(net,p,t);  %%%%%输出信号output为网络调整过程中的误差% 绘制随机输入信号\输出信号的波形hold on;subplot(3,1,1);plot(time,y,'r*-'); %输出信号output为网络调整过程中的误差xlabel('t','position',[20.5,-1.8]);ylabel('随机输入信号s(t)');axis([0 20 -2 2]);subplot(3,1,2);output=seq2con(output);plot(time,output{1},'ko-');  %绘制预测输出信号的波形xlabel('t','position',[20.5,-1.8]);ylabel('预测输出信号y(t)');axis([0 20 -2 2]);subplot(3,1,3);e=output{1}-y;plot(time,e,'k-');   %绘制误差曲线xlabel('t','position',[20.5,-1.8]);ylabel('误差曲线e(t)');axis([0 20 -2 2]);hold off;