2009-9-18Matlab 做引擎总结
1. 我用 matlab 的神经网络函数编写了一个 m 文件,
主要语句就是 net=new(threshold,[5,4],{....});
new=train(net,p,t);
然后调用训练数据进行训练。但偶然发现,就是调用同一批数据进行多次训练时,得出的训练
次数和误差曲线等也不一样。就是怎么回事?
特求助高手指点。
/*
预测结果不一样是正常的,每次结果不一样才可能找到理想的结果
因为初始权值是通过随机取值所得,每次训练都重新随机取值,当然训练结果就不一样,
你挑一个训练结果最好的网络用来仿真就行了。或者你的初始权值矩阵不要随机取值。
找到好的结果就进行保存 save lename net
So perfect
1、 我知道的目前一般的神经网络,尤其是前馈网络可以做的是两方面的问题:分类和函数拟
合(包括预测)。当然,hopfield 网络还具有联想记忆功能,可以做一些相关的事情。
2、我觉得神经网络还处于初期阶段,很多问题,尤其是规模大或者要求精度高的问题,还
是解决不了的,不要总是怀疑自己是不是程序错了或者有什么问题之类的。(说实话,我
觉得神经网络进入工程还有很长的路要走。做论文还可以,呵呵)
3、一般来说,前馈网络的样本都是要采取归一化的,原因是样本的数量级差太大的话会出
现大样本吞吃小样本的现象,使得数量小的那一维样本不起作用。
4、神经网络的训练训练的是权值,也就是说,每次训练把所有的样本都输入,计算总的误
差,根据这个误差关于权值的导数修改权值(负梯度*学习率)。也就是说,样本是用来寻
找规律的,而神经网络还是很笨的,不可能学一次就学会,要反复的学才行,而且是学了
后面的忘了前面的(呵呵)。
5、4 中所说的训练方法就是离线梯度法,而在线梯度法是指每次输入一个样本,根据这一
个样本计算误差,然后用这个误差的关于权值的导数修改权值(这样是对梯度法的近似),
这种方法对于规模比较大的问题可以起到减小计算量的作用。
6、用神经网络的目的是找到规律后用它去分类,去预测(不是训练,训练只是手段)。神
经网络训练好了以后权值就不再动了,再输入样本后就用训练好的神经网络去分类,去预
测,你可能会发现有一些分类错了(或是预测错了),这是正常的,它的能力是有限的,
我们只要求它达到某一个正确率就可以了。
7、很多人会说,我用神经网络作的,两次结果不一样,这是正常的,一样才是不正常的,
评论1