BP神经网络拟合一阶线性系统 (A)Train.mlx、Test.mlx、Weight.mat (B)服务 > 离散时间 = 0.005; > 惯性时间 = 0.1; 一阶系统特点:时间常数越大,惯性越大,响应速度越慢。 稳定时间为4T=0.4s,测试结果如图 Include file: #线性系统 #一阶 #惯性环节 #BP #神经网络 #拟合 #NeuralNetwork
最近在研究用BP神经网络来拟合一阶线性系统,和大家分享一下我的过程和体会。
咱们先来看涉及到的文件,有Train.mlx、Test.mlx以及Weight.mat。Train.mlx这个文件大概率是用来训练我们的BP神经网络模型的,在MATLAB的.mlx文件里,可以很方便地写代码、加注释,进行交互式的开发和调试。比如在训练代码部分可能会类似这样:
% 假设我们已经准备好输入数据x和目标输出数据y % 这里简单生成一些模拟数据 x = 0:0.005:0.4; y = 1 - exp(-x / 0.1); % 创建一个简单的BP神经网络 net = feedforwardnet(10); % 10个隐藏层神经元 net.trainParam.epochs = 1000; % 设置训练轮数 net.trainParam.lr = 0.01; % 设置学习率 % 训练网络 [net, tr] = train(net, x', y');在上面这段代码里,首先生成了一阶线性系统的模拟输入输出数据,x是时间序列,根据离散时间0.005取值,一直到稳定时间0.4s。y是根据一阶系统的公式1 - exp(-x / 惯性时间)计算得到,这里惯性时间为0.1。接着创建了一个前馈型的BP神经网络net,设置了隐藏层有10个神经元。同时设置了训练的轮数为1000次,学习率为0.001。最后调用train函数来训练这个神经网络。
Test.mlx自然就是用来测试我们训练好的模型啦。测试代码可能如下:
% 用训练好的网络进行预测 y_pred = net(x'); % 计算误差 mse = mean((y_pred - y').^2); disp(['均方误差MSE: ', num2str(mse)]); % 绘图对比 figure; plot(x, y, 'b', 'LineWidth', 1.5); hold on; plot(x, y_pred, 'r--', 'LineWidth', 1.5); legend('真实值', '预测值'); xlabel('时间(s)'); ylabel('输出'); title('BP神经网络拟合一阶线性系统结果');这段代码用训练好的网络net对输入x进行预测,得到预测值y_pred。然后计算预测值和真实值之间的均方误差mse,并打印出来。最后通过绘图直观地展示真实值和预测值的对比情况。
还有个Weight.mat文件,这个文件应该是用来存储训练好的神经网络的权重参数的。在训练过程中,神经网络通过不断调整权重来优化预测结果,训练结束后把这些权重保存下来,方便后续测试或者部署的时候直接加载使用,就不用每次都重新训练了。
这里再说说一阶系统本身,我们设置离散时间为0.005,惯性时间为0.1。一阶系统有个特点,就是时间常数越大,惯性越大,响应速度越慢。这里的惯性时间0.1其实就相当于时间常数,稳定时间为4T,也就是4 * 0.1 = 0.4s。从测试结果图中(很可惜这里没办法直接展示图),我们可以直观地看到BP神经网络拟合的效果如何。如果拟合得好,预测值曲线应该和真实值曲线贴合得比较紧密,均方误差也会比较小。
这次用BP神经网络拟合一阶线性系统,让我对BP神经网络的实际应用以及一阶系统的特性都有了更深入的理解。希望这篇博文对同样在研究相关内容的小伙伴们有所帮助呀。
#线性系统 #一阶 #惯性环节 #BP #神经网络 #拟合 #NeuralNetwork