matlab bp神经网络 精度低

2020-05-06 科技 100阅读

首先是我不知道你用的matlab是什么版本。

如果用的2010以后的版本,那么你这样初始化神经网络一定会报警告。

2010版以后初始化神经网络的语句是这样的

net = newff(p, t, 7);

输出层不需要自己去告诉系统。

我想知道的第二个问题,是你的输出层函数是否需要使用logsig。如果使用purelin,那么你大可不必去归一化。后面我会告诉你原因。

你手动指定了训练次数,但是学习率0.01这个数值不知道你从哪里找到的。我可能会选择高一点的学习率,最高我用过0.25.

训练函数你也是手动指定的,这个是需要的么?如果不需要,对于7个神经节点,完全可以使用trainlm,这样你也不需要这么多的训练次数。


下面说一下2010以后的matlab中,神经网络训练增加的一个功能。在初始化神经网络以后,有一个默认的dividing function,将训练样本中的一部分用来校验神经网络性能,以防止过度训练。那么这个参数可能会导致训练不充分。在初始化神经网络以后,需要做的工作是设定net.divideFcn = '';用来去掉这个分配函数。

如果你需要更改你的transfer function,那么可以在net.layers{2}.transferFcn = 'logsig'将输出层传输函数手动修改。


那么,我使用全默认设置,没有进行归一化处理,获得的结果是这样的。

这个就是把你的t和训练后的神经网络计算的结果放在一起。结果已经很不错了。

如过我去掉了分配函数,那么神经网络就会一直训练到训练次数上限或者达到目标值。165次训练后,误差值是1.77e-19(误差使用mean squared error计算),结果在这里贴出来已经没意义了,因为几乎没有误差。

如果你还有问题,那么跟我细聊一下。

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com