我正在尝试实现神经网络来识别非线性系统。我已经在simulink中实现了一个非常简单的系统,并且根据其输入和输出的示例,我希望让NN模仿它的行为。系统是以下
顶部的模式(具有随机数作为输入的模式)生成训练集,而第二个模式(斜坡作为输入)用于检查NN是否正常运行。 该网络是一个双层网络,具有隐藏的 tanh 节点层和线性输出层。我已经实现了两个版本的网络,一个是使用随机梯度下降(每个步骤更新),另一个是批量执行更新。目前我专注于迭代解决方案。 我还实施了this post中描述的列车验证测试程序。
这里是网络的参数:
我使用示例集的80%来训练NN,10%用于计算误差,剩余的10%用于生成输出,您可以在下面看到。但是,我无法使网络针对不同类型的输入推广系统。
前两个图显示了训练阶段。左边的那个是训练过程的最后一次迭代的输出,右边的那个是每个训练时期结束时误差的平均值的图。最后两个图显示了网络在看不见的数据上的性能。使用未以任何方式用于训练的示例集中的输入数据获得右侧的图。右边的那个是使用斜坡作为输入生成的,并将其与系统的输出进行比较以获得相同的输入。
我做错了什么? 完整代码可以找到here
此致
安德烈
答案 0 :(得分:2)
原来,问题是规范化问题。实际上,我在预处理的参考信号和使用非标准化信号获得的输出信号上训练神经网络。这会在非线性系统的情况下引起问题。现在我使用标准化输入生成训练输出,一切正常。
如果有人需要更多详细信息,请随时与我联系
问候 安德烈