基于时间反向传播 (BPTT)递归神经网络实现非线性系统识别附matlab代码

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 基于时间反向传播 (BPTT)递归神经网络实现非线性系统识别附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机 电力系统

⛄ 内容介绍

基于时间反向传播 (BPTT)递归神经网络实现非线性系统识别附matlab完整代码

⛄ 完整代码

%% Non-Linear System Identification using Backpropagation Throught Time (BPTT)

clc;

clear all;

close all;


%% Training method

BPTT_type='Epochwise';

% BPTT_type='Truncated';


%% system configuration

ts=0.001;

if (strcmp(BPTT_type,'Epochwise'))

   a=20;

   eta = 0.001;    %%%%%% Learning Rate 0-1   eg .01, .05, .005

   t = 0:ts:a;

   l=length(t);

   u = square(pi*t);

else

   a=20;

   eta = 0.05;    %%%%%% Learning Rate 0-1   eg .01, .05, .005

   t = 0:ts:a;

   l=length(t);

   u = square(pi*t);

end


% u = awgn(u,30);

plant=[1 -0.25 0.1045 0.0902]; % Minimum Phase Plant

y(1:2)=0;


for i=3:length(t)

   ph=[y(i-1) y(i-2) cos(2*u(i))+exp(-10*abs(u(i))) u(i-1)];

   y(i)=ph*plant'+.001*randn(1,1);

end


%% RNN architecture


inp=6;  % Input Layer Neurons (2 nodes for u(i) and u(i-1), 2 for y(i-1) and y(i-2) for state 1 feedback + 1 bias

N1=3;   % Middle Layer Neurons

N2=1;   % Output Layer Neurons


window_length=3;

epoch=(length(t)-2)/window_length;


w1=ones(N1,inp);

w2=ones(N2,N1);


y_NN = 0.*y;


j=2;

a1=zeros(N1,length(t));

e = ones(window_length,1);


%% RNN configuration

for k=1:epoch


   for i=1:window_length

   j=j+1;    

       Input_Vec(:,i)=[-y_NN(j-1) -y_NN(j-2) u(j) u(j-1) a1(1,j-1) 1]';

       n1 = w1*Input_Vec(:,i);

       

       a1(:,j)=tansig(n1);    %%%% Hidden Layer Activation Function  % tansig for [-1,+1] % logsig for [0,1]

       

       n2 = w2*a1(:,j);

       

       a2=tansig(n2);    %%%% Output Layer Activation Function  

       

       y_NN(j) = a2;

       

       e(i) = y(j) - y_NN(j);

   

       if(strcmp(BPTT_type,'Epochwise'))

       %% Epochwise BBTT

       Y2(:,i) = 2*dtansig(n2,a2)*e(i); %%%% For Output Layer  Equation (15.40) for n=n1

       Y1(:,i) = diag(dtansig(n1,a1(:,j)),0)*[e + w2'*Y2(:,i)]; %%%% For Hidden Layer

       elseif(strcmp(BPTT_type,'Truncated'))

       %% Truncated BPTT

       Y2(:,i) = 2*dtansig(n2,a2)*e(i); %%%% For Output Layer

       Y1(:,i) = diag(dtansig(n1,a1(:,j)),0)*w2'*Y2(:,i); %%%% For Hidden Layer

       

   end

   end

   

   MSE(k) = mse(e);

   

       w1 = w1 + eta*Y1*Input_Vec';  % Equation (15.41) and (15.44)

       w2 = w2 + eta*Y2(:,i)*a1(:,j)';

%         w2 = w2 + eta*Y2*a1(:,j-i+1:j)';

       

end


for n=1:length(MSE)

MSE_trend(n)=mean(MSE(1:n));

end

10*log10(MSE_trend(n))


figure

semilogy(MSE);

hold on

semilogy(MSE_trend,'r')

title('Objective Function');


figure

plot(t,y,'r')

hold on

plot(t,y_NN,'b')



%% Testing

a=10;

ts=0.001;

t = 0:ts:a;

l=length(t);

u = square(pi*t);

u = awgn(u,30);

plant=[1 -0.25 0.1045 0.0902]; % Minimum Phase Plant

epoch=(length(t)-2)/window_length;


y=0;

y(1:2)=0;


for i=3:length(t)

   ph=[y(i-1) y(i-2) cos(2*u(i))+exp(-10*abs(u(i))) u(i-1)];

   y(i)=ph*plant';

end


y_NN = 0.*y;

j=2;

a1=zeros(N1,length(t));

for k=1:epoch

   for i=1:window_length

   j=j+1;    

       Input_Vec(:,i)=[-y_NN(j-1) -y_NN(j-2) u(j) u(j-1) a1(1,j-1) 1]';

       n1 = w1*Input_Vec(:,i);

       

       a1(:,j)=tansig(n1);    %%%% Hidden Layer Activation Function  % tansig for [-1,+1] % logsig for [0,1]

       

       n2 = w2*a1(:,j);

       

       a2=tansig(n2);    %%%% Output Layer Activation Function  

       

       y_NN(j) = a2;

       

       e(i) = y(j) - y_NN(j);

       

   end

   

   MSE(k) = mse(e);

   

end


for n=1:length(MSE)

MSE_trend(n)=mean(MSE(1:n));

end

10*log10(MSE_trend(n))


figure

semilogy(MSE);

hold on

semilogy(MSE_trend,'r')

title('Objective Function');


figure

plot(t,y,'m')

hold on

plot(t,y_NN,'b')

legend('Actual Output','RNN');

⛄ 运行结果

⛄ 参考文献

[1]TANG Meili, HU Qiong, MA Tinghuai. 基于循环神经网络的语音识别研究[J]. 现代电子技术, 2019, 42(14):5.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
8天前
|
算法
MATLAB最小二乘法:线性最小二乘、加权线性最小二乘、稳健最小二乘、非线性最小二乘与剔除异常值效果比较
MATLAB最小二乘法:线性最小二乘、加权线性最小二乘、稳健最小二乘、非线性最小二乘与剔除异常值效果比较
19 0
|
23天前
|
存储 人工智能 机器人
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
|
28天前
|
存储
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】
|
3月前
|
机器学习/深度学习 算法 计算机视觉
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
30 2
|
3月前
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
46 0
|
7月前
|
机器学习/深度学习 监控 算法
【tensorflow】连续输入的神经网络模型训练代码
【tensorflow】连续输入的神经网络模型训练代码
|
9月前
|
机器学习/深度学习 算法 数据挖掘
|
7月前
|
机器学习/深度学习 存储 自然语言处理
|
3月前
|
机器学习/深度学习 存储 算法
【轻量化:实操】动手实现神经网络中的裁枝操作(附演示代码&yolo系列)
【轻量化:实操】动手实现神经网络中的裁枝操作(附演示代码&yolo系列)
46 1
|
4月前
|
机器学习/深度学习 自然语言处理 PyTorch
深入理解循环神经网络(RNN):案例和代码详解
深入理解循环神经网络(RNN):案例和代码详解
216 0