神经网络系统识别

Neural Network System Identification

我正在尝试实施神经网络来识别非线性系统。我已经在 simulink 中实现了一个非常简单的系统,并且在其输入和输出示例的基础上,我想让神经网络模仿它的行为。系统如下

顶部的模式(以随机数作为输入的模式)生成训练集,而第二个模式(以斜坡作为输入)用于检查神经网络是否正常运行。 该网络是一个两层网络,具有 tanh 个节点的隐藏层和线性输出层。我已经实现了两个版本的网络,一个使用随机梯度下降(在每一步更新),另一个使用批量执行更新。目前我专注于迭代解决方案。 我还实施了 this post.

中描述的训练验证测试程序

这里是网络的参数:

我使用 80% 的示例集来训练神经网络,10% 用于计算误差,其余 10% 用于生成如下所示的输出。但是,我无法让网络针对不同类型的输入概括系统。

前两个图显示训练阶段。左边的是训练过程最后一次迭代的输出,右边的是每个训练时期结束时的误差均值图。最后两个图显示了网络在未见数据上的性能。右侧的图是使用未在 any 训练方式中使用的示例集的输入数据获得的。右边的那个是使用斜坡作为输入生成的,并将其与相同输入的系统输出进行比较。

我做错了什么? 可以找到完整的代码 here

此致

安德里亚

原来是归一化问题。事实上,我在经过预处理的参考信号和使用非标准化信号获得的输出信号上训练了神经网络。在非线性系统的情况下,这会导致问题。现在我使用标准化输入生成训练输出,一切正常。

如果有人需要更多详细信息,请随时与我联系

问候 安德里亚