基于RNN神经网络的系统参数辨识matlab仿真

简介: 基于RNN神经网络的系统参数辨识matlab仿真

1.算法描述

   神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到希望的y,结构图如下:

5c51fd492f952a8a4da90cfda7050bfc_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

   RNN是一种特殊的神经网络结构, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的. 它与DNN,CNN不同的是: 它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种’记忆’功能.RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。

   RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。首先我们要明确什么是序列数据,摘取百度百科词条:时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。这是时间序列数据的定义,当然这里也可以不是时间,比如文字序列,但总归序列数据有一个特点——后面的数据跟前面的数据有关系。

    RNN的目的使用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNN能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关,模型结构如下:

50c892c154c23c7d2d13aff626851892_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

   RNN网络是一种基础的多层反馈神经网络,该神经网络的节点定向连接成环。相比于前馈神经网络,该网络内部具有很强的记忆性,它可以利用内部的记忆来处理任意时序的输入序列。 循环网络是一种对序列数据有较强的处理能力的网络。在网络模型中不同部分进行权值共享使得模型可以扩展到不同样式的样本,比如CNN网络中一个确定好的卷积核模板,几乎可以处理任何大小的图片。将图片中分成多个区域,使用同样的卷积核对每一个区域进行处理,最后可以获得非常好的处理结果。同样的,循环网络使用类似的模块(形式上相似)对整个序列进行处理,可以将很长的序列进行泛化,得到需要的结果。

   对每一个参数求其偏导数,使用随机梯度下降方法更新参数

21459505d4bde9f6398b4c9941fc5d32_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

初始时刻,没有上一个隐层的输出,因此初始化为[0,0]。
将上一个隐层的输出与当前时刻输入进行拼接,得到第一个隐藏计算的输入为[0,0,1]。
隐层内计算,将拼接后的输入值与初始权重W进行相乘,同时加上偏置b,得到一个基础值,值得注意的是这个W和b是一个更新的过程,需要不断迭代计算。
第一次激活,这次激活是对s(t)进行激活,采用的激活函数为tanh函数,将上一步得到的基础值代入到tanh函数中,得到的输出即为s(t),这个s(t)将作为下一层的s(t-1)参与下一个隐层的计算。
当前层输出基础值计算,将s(t)和新的权重V相乘加上偏置b,得到当前层输出基础值。
当前层最终输出,加上激活函数以后就是当前层的输出啦,此时采用的激活函数一般为softmax()。
a9c44fbbf4262c4a31e6e9f50dc17ad3_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
5e4cb0bad4c395b64321a183ba60c317_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
37d32bee43f3c94cafe58248bead89fd_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
675fa6873d1e34f02c386d7ecd4d3f34_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

2.仿真效果预览
matlab2022a仿真结果如下:

测试样本:

923    32.54999924    880    73.12791173    5.00 
923    32.54999924    880    80.13526276    5.00 
923    32.54999924    880    99.99999937    5.00 
923    32.54999924    880    74.7898174    5.00 
923    32.54999924    880    82.97630188    5.00 
923    32.54999924    880    82.1910392    5.00 
923    32.54999924    880    76.40087537    5.00 
923    32.54999924    880    76.47206613    5.00 
923    32.54999924    880    76.47206613    5.00 
923    32.54999924    880    76.29192801    5.00 
923    32.54999924    880    82.797826    5.00 
923    32.54999924    880    75.36246728    5.00 
923    32.54999924    880    71.64880462    5.00 
923    32.54999924    880    71.87758833    5.00 
923    32.54999924    880    71.87758833    5.00 
923    32.54999924    880    72.2944235    5.00 
923    32.54999924    880    81.76186206    5.00 
923    32.54999924    880    75.07288529    5.00 
923    32.54999924    880    92.74331369    5.00 
923    32.54999924    880    89.57816762    5.00 
923    32.54999924    880    76.78911908    5.00 
923    32.54999924    880    73.55658823    5.00 
923    32.54999924    880    72.27779603    5.00 
923    32.54999924    880    72.27779603    5.00 

24a76e71b26c2bb8c5a0e45a1e17f0ff_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
6b0dd0925a1cb5f624085feb6932e6d6_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
7ac7a8210d5010228ae1a24d3ecd8fc9_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
8fa0525197a852695428a4e742e408a0_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
936c9a0af3c0e48c45c822718856ff48_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

 
u = data(:,1:3);
x = data(:,4:5);
 
%数据归一化
x1= x(:,1);xmin1 = min(x1);xmax1 = max(x1);
x2= x(:,2);xmin2 = min(x2);xmax2 = max(x2);
 
x1=(x1)/(xmax1);
x2=(x2)/(xmax2);
 
x = [x1,x2];
 
 
u1= u(:,1);umin1 = min(u1);umax1 = max(u1);
u2= u(:,2);umin2 = min(u2);umax2 = max(u2);
u3= u(:,3);umin3 = min(u3);umax3 = max(u3);
 
u1=(u1)/(umax1);
u2=(u2)/(umax2);
u3=(u3)/(umax3);
 
u = [u1,u2,u3];
 
 
%RNN;
[xpre,A,B,C,D] = func_RNN(u,x);
 
function [xpre,Aw,Bw,Cw,Dw] = func_RNN(u,x);
 
dtrain = u';
dtest  = x';
 
%网络参数初始化
Nin = 3;
Nhi = 32;
Not = 2;
%权重初始化
Aw  = rand(Nhi,Nhi);
Bw  = rand(Not,Nhi);
Cw  = rand(Nhi,Nin);
Dw  = rand(Nhi,1);
xpre= zeros(Not,length(u));
 
%RNN网络训练
Lr = 0.002;           
for ij=1:80
    ij
    for t=1:length(dtrain)    
        %从输入到隐层
        if t==1
           States = Cw*dtrain(:,t) + Dw;
        else
           States = Cw*dtrain(:,t) + Aw*fx(:,t-1) + Dw;
        end
        %从隐层到输出
        for n=1:Nhi
            fx(n,t) = 1/(1+exp(-States(n,:)));%通过sigmoid函数
        end
        xpre(:,t) = Bw*fx(:,t);
        %误差计算
        Error     = xpre(:,t)-dtest(:,t);
        %权值更新
        [Aw,Bw,Cw,Dw]=func_wdata(t,Lr,Error,dtrain,fx,Aw,Bw,Cw,Dw);
    end
end
相关文章
|
3月前
|
数据采集 算法 前端开发
MATLAB|基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]
MATLAB|基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]
165 2
|
3月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
243 2
|
3月前
|
监控
基于MATLAB/Simulink的单机带负荷仿真系统搭建
使用MATLAB/Simulink平台搭建一个单机带负荷的电力系统仿真模型。该系统包括同步发电机、励磁系统、调速系统、变压器、输电线路以及不同类型的负荷模型。
493 5
|
2月前
|
传感器 机器学习/深度学习 算法
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)
203 0
|
2月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
327 0
|
3月前
|
机器学习/深度学习 算法 PyTorch
【变分高斯Copula推断】基于Bernstein多项式的非参数转换则在描述单变量边缘后验时提供了充分的灵活性(Matlab代码实现)
【变分高斯Copula推断】基于Bernstein多项式的非参数转换则在描述单变量边缘后验时提供了充分的灵活性(Matlab代码实现)
102 2
|
2月前
|
算法 数据挖掘 调度
数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究(Matlab代码实现)
数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究(Matlab代码实现)
128 0
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
268 0
|
2月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
132 0
|
2月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
117 0

热门文章

最新文章