首页 > 代码库 > 闲谈神经网络--写给初学者(三)

闲谈神经网络--写给初学者(三)

  接上篇。

  前面两篇讲解了神经网络就是一个黑箱,里面有一个一个的小圆球(神经元)连接而成,通过改变神经元的连接方式及各个参数,就可以实现一个符合要求的神经网络。接下来我们来举一个BP神经网络的例子,以加深理解。

  在讲解这个例子之前,大概说一下一个神经网络解决问题的思路:

  1.对要解决的问题进行理解,找到输入输出数据。

  2.把已知的输入输出数据分为两部分:一部分用来训练网络;另外一部分来验证训练的网络到底好不好用。

  3.对输入数据进行预处理及归一化处理。

  4.创建合适的网络,如BP、感知器、RBF、Hopfield等等。(其实是先建立一个神经网络的黑箱子)

  5.设置网络训练参数,例如设置训练函数,学习函数、激活函数等等。

  6.使用输入输出训练网络。(其实是把黑箱子里面的神经元的各个参数给训练和学习合适了)

  7.使用验证数据验证网络。

  8.验证后觉得网络还不错,就可以实际应用,在实际应用过程中,还可以再对模型进行优化、重构等等。

下面开始我们例子的说明,用一个传统的花分类的例子(http://en.wikipedia.org/wiki/Iris_flower_data_set ):大概意思是:给你一朵花的四个特征,神经网络输出它的品种(共有三个品种)。

所以每一个样本的输入:四个数据,代表花的四个特征;输出:一个数据,代表花的品种,分别为1,2,3代表三个不同的品种。

样本数据为:http://files.cnblogs.com/wuguanglei/%E6%95%B0%E6%8D%AE.rar

其中trainData.txt用作训练数据,testData.txt用作验证数据。Matlab程序代码如下:

 

%0.操作前clear;close all;clc;%1.读入训练数据[f1,f2,f3,f4,class] = textread(‘trainData.txt‘ , ‘%f%f%f%f%f‘,150);input=[f1,f2,f3,f4]‘;%神经网络是一列算做一个样本输入,因此矩阵要转置一下output=class‘;%2.输入数据归一化[input,Se] = mapminmax(input)  ;minI=Se.xmin;maxI=Se.xmax;%3.构造输出数据矩阵s = length( class) ;%输出为1,2,3,这用1 0 0表示1;0 1 0表示2;0 0 1表示3output = zeros( 3, s  ) ;for i = 1 : s    output( class( i ),i  ) = 1 ;end%4.创建神经网络net = newff( minmax(input) , [70 3] , { ‘logsig‘ ‘logsig‘ } , ‘traingdx‘ ) ; %其中70表示第一层70个神经元,第二层30个神经元,后面几个参数分别设置的是激活函数和训练函数。%5.设置训练参数net.trainparam.show = 40 ;net.trainparam.epochs = 600 ;net.trainparam.goal = 0.01 ;net.trainParam.lr = 0.01 ;%6.开始训练[net,tr,e] = train( net, input , output ) ;%7.测试网络[t1 t2 t3 t4 c] = textread(‘testData.txt‘ , ‘%f%f%f%f%f‘,150);testInput=[t1,t2,t3,t4]‘;testInput = mapminmax (testInput ) ;Y = sim( net , testInput ) ;%8.统计结果[s1 , s2] = size( Y ) ;hitNum = 0 ;for i = 1 : s2    [m , Index] = max( Y( : ,  i ) )     if( Index  == c(i)   )         hitNum = hitNum + 1 ;     endendsprintf(‘识别率是 %0.3f%%‘,100 * hitNum / s2 )

 

详细讲解看代码注释吧。

 

 就先写到这儿吧,对于入门,应该够了。

 

============================

最近帮朋友弄了微信公众号,每天早上6点30分,发送一个60秒的语音,有兴趣的朋友不妨关注一下。

微信号:歪理邪说(wailixs)

二维码:

闲谈神经网络--写给初学者(三)