首先是我不知道你用的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计算),结果在这里贴出来已经没意义了,因为几乎没有误差。
如果你还有问题,那么跟我细聊一下。