1、NARX神经网络简介
NARX(非线性自回归外部输入)神经网络是一种用于非线性建模和预测的神经网络结构。与传统的自回归模型不同,NARX网络可以接收外部输入来影响输出结果,从而更好地捕捉系统的复杂性和非线性特征。
NARX神经网络通常包含一个自回归层和一个外部输入层,用于处理历史数据和外部输入数据。这两层之间通常包含多个隐藏层,以增加网络的表达能力和拟合能力。NARX网络在许多领域广泛应用,如时间序列预测、控制系统建模和信号处理等。
NARX网络的训练通常使用反向传播算法,通过最小化网络输出与真实输出之间的误差来调整网络参数。NARX网络的性能取决于网络结构的设计、训练数据的质量和数量,以及网络的超参数设置。通过合理设计和调整,NARX网络可以取得很好的预测效果,广泛应用于实际工程和科学问题中。
2、基于NARX神经网络的磁悬浮建模原理及流程
磁悬浮系统是一种利用磁力和电流来控制物体悬浮和运动的系统,常用于高精度定位和控制领域。基于NARX神经网络的磁悬浮建模可以帮助理解系统的非线性特性,实现准确的建模和控制。
-
数据采集:首先,需要通过传感器采集磁悬浮系统的输入和输出数据,包括磁力、电流、位置、速度等信息。这些数据将被用于训练和测试NARX神经网络模型。
-
数据预处理:对采集的数据进行预处理,包括去除噪声、归一化处理等操作,以确保数据质量和网络训练的稳定性。
-
网络设计:设计NARX神经网络的结构,包括输入层、输出层和隐藏层的节点数、激活函数的选择等。通常,NARX网络包括自回归层和外部输入层,以捕捉系统的历史信息和外部影响。
-
网络训练:使用采集的数据对NARX神经网络进行训练,通过反向传播算法来调整网络参数,使网络输出与实际输出之间的误差最小化。
-
模型验证:使用另一组数据对训练好的NARX神经网络模型进行验证,评估模型的预测性能和泛化能力,以确保模型的有效性和可靠性。
-
系统建模:利用训练好的NARX神经网络模型对磁悬浮系统进行建模,实现对系统的非线性特性的理解和描述,为后续的控制和优化提供依据。
通过以上流程,基于NARX神经网络的磁悬浮建模可以实现对系统的准确建模和预测,为系统的控制和优化提供重要支持。
3、基于NARX神经网络的磁悬浮建模说明
1)解决问题
对磁悬浮系统进行建模
2)解决方案
NARX(具有外部输入的非线性自回归)神经网络对磁悬浮动态系统建模
尝试构建一个可以对使用控制电流悬浮的磁体的动态行为进行预测的神经网络。
特点是磁体的位置和控制电流共同决定了磁体在片刻之后的位置。
使用反馈时间序列的过去值(磁体位置)和外部输入序列(控制电流)来预测反馈序列的将来值。
4、数据集
1)说明
将数据组织成两个矩阵(输入时间序列 X 和目标时间序列 T)来为神经网络设置函数拟合问题数据。
输入时间序列 X 是一个行元胞数组,其中每个元素是控制电流的相关时间步。
目标时间序列 T 也是一个行元胞数组,其中每个元素是悬浮磁体位置的相关时间步。
2)加载数据集
代码
[x,t] = maglev_dataset;
3)数据大小
说明
X 和 T 都有 4001 列。这些列表示控制电流和磁体位置的 4001 个时间步。
代码
size(x)
size(t)
ans =
1 4001
ans =
1 4001
5、使用神经网络进行时间序列建模
1)说明
创建一个学习对磁体位置变化方式进行建模的神经网络
2)设置随机种子避免随机性
代码
setdemorandstream(491218381)
3)尝试具有 10 个神经元的单隐藏层
说明:双层(即,一个隐藏层)NARX 神经网络可以拟合任何动态输入-输出关系,前提是隐藏层中有足够的神经元。非输出层称为隐含层。
代码
net = narxnet(1:2,1:2,10);
view(net)
视图效果
4)使用外部输入和反馈时间序列的前两个时间步来填充网络的两个抽头延迟状态
说明:需要将两个反馈时间序列同时用作输入时间序列和目标时间序列。
函数 PREPARETS 准备用于仿真和训练的时间序列数据。Xs 将包含要提交到网络的移位输入时间序列和目标时间序列。Xi 是初始输入延迟状态。Ai 是层延迟状态(在这种情况下为空,因为没有层到层的延迟),Ts 是移位反馈时间序列。
代码
[Xs,Xi,Ai,Ts] = preparets(net,x,{},t);
5)开始训练
说明:时间步自动分为训练集、验证集和测试集。训练集用于对网络进行训练。只要网络针对验证集持续改进,训练就会继续。测试集提供完全独立的网络准确度测量。
代码
[net,tr] = train(net,Xs,Ts,Xi,Ai);
视图结果
6、均方误差
1)说明
性能以均方误差衡量,并以对数刻度显示。随着网络训练的加深,均方误差迅速降低。
绘图会显示训练集、验证集和测试集的性能。
代码
plotperform(tr)
视图效果
7、测试神经网络
1)说明
测量经过训练的神经网络在所有时间步的均方误差
代码
Y = net(Xs,Xi,Ai);
perf = mse(net,Ts,Y)
perf =
2.9245e-06
2)显示网络的响应与实际磁体位置的比较
说明:PLOTRESPONSE 将显示网络的响应与实际磁体位置的比较。如果模型准确,“+”点将跟随菱形点,底轴的误差将非常小。
PLOTERRCORR 显示时间 t 处的误差 e(t) 与基于不同滞后的误差 e(t+lag) 之间的相关性。中心线显示均方误差。如果网络训练良好,所有其他线将短得多,并且大多数(如果不是全部)将在红色置信界限范围内。
代码
plotresponse(Ts,Y)
视图效果
3)函数 GSUBTRACT 用于计算误差
说明:函数 GSUBTRACT 用于计算误差。该函数对减法进行泛化,以支持求元胞数组数据之间的差。
PLOTINERRCORR 显示误差与具有不同程度滞后的输入的相关性。在这种情况下,大多数或所有线都应在置信界限范围内,包括中心线。
代码
E = gsubtract(Ts,Y);
ploterrcorr(E)
视图效果
8、网络以开环形式进行训练
1)说明
网络以开环形式进行训练,其中目标被用作反馈输入。也可以将网络转换为闭环形式,其中,其自身预测成为反馈输入。
代码
net2 = closeloop(net);
view(net2)
试图效果
2)PREPARETS 会再次准备时间序列数据,同时会考虑更改后的网络。
代码
[Xs,Xi,Ai,Ts] = preparets(net2,x,{},t);
Y = net2(Xs,Xi,Ai);
plotresponse(Ts,Y)
视图效果
9、 提前实际磁体位置一个时间步访问预测磁体位置
1)说明
提前实际磁体位置一个时间步访问预测磁体位置,可以从网络中删除一个延迟,以便在任何给定时间 t,输出均为时间 t+1 处的位置的估计值。
代码
net3 = removedelay(net);
view(net3)
视图效果
2)再次使用 PREPARETS 准备用于仿真的时间序列
说明:再次使用 PREPARETS 准备用于仿真的时间序列。这次网络又是非常准确,因为它进行的是开环预测,但输出移位一个时间步。
代码
[Xs,Xi,Ai,Ts] = preparets(net3,x,{},t);
Y = net3(Xs,Xi,Ai);
plotresponse(Ts,Y)
视图效果
10、总结
基于MATLAB的NARX神经网络的磁悬浮建模过程可以总结如下:
-
数据准备:首先,需要准备用于训练和测试的磁悬浮系统的输入和输出数据,包括磁力、电流、位置、速度等信息。数据可以被保存在MATLAB的数据文件中,并加载到工作空间中。
-
网络创建:使用MATLAB的神经网络工具箱,创建一个NARX神经网络。需要定义网络的层次结构、节点数、激活函数等参数。通常,NARX网络包括自回归层和外部输入层。
-
数据预处理:对加载的数据进行预处理,包括去除噪声、归一化处理等操作,以确保数据质量和网络训练的稳定性。
-
网络训练:使用MATLAB的训练函数,如trainlm或者trainbr,对NARX神经网络进行训练。通过多次迭代调整网络参数,使网络输出与实际输出之间的误差最小化。
-
模型评估:使用另一组数据对训练好的神经网络模型进行验证和评估,检验模型的预测性能和泛化能力。可以利用MATLAB的模型评估工具来进行模型性能分析和可视化。
-
模型应用:将训练好的神经网络模型应用于磁悬浮系统的建模和预测。可以通过输入新的数据进行模型预测,以了解系统的动态行为和响应。
通过以上步骤,基于MATLAB的NARX神经网络的磁悬浮建模可以实现对系统的准确建模和预测,为系统的控制和优化提供支持。使用MATLAB的神经网络工具箱和数据处理工具,可以方便地进行复杂系统的建模和分析。
11、源代码
代码
%% 基于NARX神经网络的磁悬浮建模
%说明:对磁悬浮系统进行建模
%方案: NARX(具有外部输入的非线性自回归)神经网络对磁悬浮动态系统建模
%尝试构建一个可以对使用控制电流悬浮的磁体的动态行为进行预测的神经网络。
%特点是磁体的位置和控制电流共同决定了磁体在片刻之后的位置。
%使用反馈时间序列的过去值(磁体位置)和外部输入序列(控制电流)来预测反馈序列的将来值。
%% 数据集
%说明:将数据组织成两个矩阵(输入时间序列 X 和目标时间序列 T)来为神经网络设置函数拟合问题数据。
%输入时间序列 X 是一个行元胞数组,其中每个元素是控制电流的相关时间步。
%目标时间序列 T 也是一个行元胞数组,其中每个元素是悬浮磁体位置的相关时间步。
%加载数据集
[x,t] = maglev_dataset;
%数据大小
%X 和 T 都有 4001 列。这些列表示控制电流和磁体位置的 4001 个时间步。
size(x)
size(t)
%% 使用神经网络进行时间序列建模
%说明:创建一个学习对磁体位置变化方式进行建模的神经网络
%设置随机种子避免随机性
setdemorandstream(491218381)
%双层(即,一个隐藏层)NARX 神经网络可以拟合任何动态输入-输出关系,前提是隐藏层中有足够的神经元。非输出层称为隐含层。
%尝试具有 10 个神经元的单隐藏层
net = narxnet(1:2,1:2,10);
view(net)
%使用外部输入和反馈时间序列的前两个时间步来填充网络的两个抽头延迟状态
%需要将两个反馈时间序列同时用作输入时间序列和目标时间序列。
%函数 PREPARETS 准备用于仿真和训练的时间序列数据。Xs 将包含要提交到网络的移位输入时间序列和目标时间序列。Xi 是初始输入延迟状态。Ai 是层延迟状态(在这种情况下为空,因为没有层到层的延迟),Ts 是移位反馈时间序列。
[Xs,Xi,Ai,Ts] = preparets(net,x,{},t);
%开始训练
%时间步自动分为训练集、验证集和测试集。训练集用于对网络进行训练。只要网络针对验证集持续改进,训练就会继续。测试集提供完全独立的网络准确度测量。
[net,tr] = train(net,Xs,Ts,Xi,Ai);
%% 均方误差
%性能以均方误差衡量,并以对数刻度显示。随着网络训练的加深,均方误差迅速降低。
%绘图会显示训练集、验证集和测试集的性能。
plotperform(tr)
%% 测试神经网络
%测量经过训练的神经网络在所有时间步的均方误差
Y = net(Xs,Xi,Ai);
perf = mse(net,Ts,Y)
%PLOTRESPONSE 将显示网络的响应与实际磁体位置的比较。如果模型准确,“+”点将跟随菱形点,底轴的误差将非常小。
%PLOTERRCORR 显示时间 t 处的误差 e(t) 与基于不同滞后的误差 e(t+lag) 之间的相关性。中心线显示均方误差。如果网络训练良好,所有其他线将短得多,并且大多数(如果不是全部)将在红色置信界限范围内。
plotresponse(Ts,Y)
%函数 GSUBTRACT 用于计算误差。该函数对减法进行泛化,以支持求元胞数组数据之间的差。
%PLOTINERRCORR 显示误差与具有不同程度滞后的输入的相关性。在这种情况下,大多数或所有线都应在置信界限范围内,包括中心线。
E = gsubtract(Ts,Y);
ploterrcorr(E)
%% 网络以开环形式进行训练
%网络以开环形式进行训练,其中目标被用作反馈输入。也可以将网络转换为闭环形式,其中,其自身预测成为反馈输入。
net2 = closeloop(net);
view(net2)
%PREPARETS 会再次准备时间序列数据,同时会考虑更改后的网络。
[Xs,Xi,Ai,Ts] = preparets(net2,x,{},t);
Y = net2(Xs,Xi,Ai);
plotresponse(Ts,Y)
%% 提前实际磁体位置一个时间步访问预测磁体位置
%提前实际磁体位置一个时间步访问预测磁体位置,可以从网络中删除一个延迟,以便在任何给定时间 t,输出均为时间 t+1 处的位置的估计值。
net3 = removedelay(net);
view(net3)
%再次使用 PREPARETS 准备用于仿真的时间序列。这次网络又是非常准确,因为它进行的是开环预测,但输出移位一个时间步。
[Xs,Xi,Ai,Ts] = preparets(net3,x,{},t);
Y = net3(Xs,Xi,Ai);
plotresponse(Ts,Y)