- 在线时间
- 194 小时
- 最后登录
- 2021-5-11
- 注册时间
- 2012-3-24
- 听众数
- 18
- 收听数
- 5
- 能力
- 1 分
- 体力
- 1998 点
- 威望
- 1 点
- 阅读权限
- 60
- 积分
- 880
- 相册
- 2
- 日志
- 16
- 记录
- 7
- 帖子
- 465
- 主题
- 47
- 精华
- 0
- 分享
- 0
- 好友
- 83

白凤
TA的每日心情 | 慵懒 2018-4-6 14:09 |
|---|
签到天数: 201 天 [LV.7]常住居民III
- 自我介绍
- 数学爱好者
群组: Matlab讨论组 群组: Linux推广 群组: 第三届数模基础实训 群组: 2013年数学建模国赛备 群组: 数学建摸协会 |
神经网络工具箱nntool的使用方法3 _# s& f* R# C0 F' t) L& b
这是根据我个人经验整理出来的关于如何使用nntool神经网络工具箱进行“数据训练”的方法:
\, x% U0 w& c+ j$ {* W& p. F- y3 x# a+ b8 v" @$ ^& X0 B) J' l c
1. 在命令窗口键入nntool命令打开神经网络工具箱;% y' X4 d1 g; G1 ?
6 x) z" j: j% R" _, j% Z4 T2. 点击Import按钮两次,分别把输入向量和目标输出加入到对应的窗口([Inputs]和[Targets])中,有两种可供选择的加入对象(点击Import后可以看见),一种是把当前工作区中的某个矩阵加入,另一种是通过.mat文件读入;
. B [: s4 ]/ N. \( F5 ~+ @5 G* Q; q4 L8 R. \5 {+ E
3. 点击[New Network]按钮,填入各参数:(以最常用的带一个隐层的3层神经网络为例说明,下面没有列出的参数表示使用默认值就可以了,例如Network Type为默认的BP神经网络);
) Z8 m6 e4 d, u. {2 [& |, q* A
0 |! q! Z; V7 [ X a8 T1) Input Range――这个通过点击Get From Input下拉框选择你加入的输入向量便可自动完成。
1 Y2 [; `7 N! Z. I& ]6 {3 ?( y# E- |
% o! z$ G0 K6 Y- Q* U9 P; R$ M5 _2) Training Function——最好使用TRAINSCG,即共轭梯度法,其好处是当训练不收敛时,它会自动停止训练,而且耗时较其他算法(TRAINLM, TRAINGD)少,也就是收敛很快(如果收敛的话),而且Train Parameters输入不多,也不用太多的技巧调整,一般指定迭代次数、结果显示频率和目标误差就可以了(详见下文)。7 {+ f5 u7 f# z# ^( W
* z/ E3 D! ~! |# G4 F3) Layer 1 Number of Neurons——隐层的神经元个数,这是需要经验慢慢尝试并调整的,大致上由输入向量的维数、样本的数量和输出层(Layer2)的神经元个数决定。
E0 D* M5 |3 D. D- w& x* Y0 V2 s5 x
4) Layer 1 Transfer Function——一般用TANSIG(当然也可以LOGSIG),即表示隐层输出是[-1,1]之间的实数,与LOGSIG相比范围更大。
+ X, I' W& R9 d$ A: \" ^4 b
! w% Y+ W# R6 B6 {5) Layer 2 Number of Neurons——输出层的神经元个数,对于两类问题,个数为1,取值分别为0和1,对于多类问题,个数为10,取值为等。7 j& n, | p, z* F- o* Z
4 g ^+ |9 a: h7 B8 A! S5 j6) Layer 2 Transfer Function——如果是模式识别的两类(或者多类)问题,一般用LOGSIG,即表示输出层的输出是[0,1]之间的实数。
; E2 {( X# ~( V6 G6 |8 ~( c+ _- c g0 E: s
所有参数输入后,可以先用View按钮预览一下,没有问题的话就可以Create了。另外,网络创建完毕后,如果需要手动设置权重的初始值,按View按钮后有个Initialize选项卡,在那里可以设定。当然了,可以不自行设定,这时候matlab执行默认的程序进行权重的初始化(没有具体研究过,可能是随机设定)。
4 y$ y% N- Q3 x9 _. I2 J9 V
+ ~6 E9 K8 f6 O& K* C4. 点击Train按钮,到达Training Info选项卡,在输入向量[Inputs]和目标输入向量[Targets]下拉框中选择你要训练的向量(即第二步加入的对象),然后到达Train Parameters选项卡,填入适当的迭代次数[epochs](一般先设置一个较小的数如200,然后观察收敛结果,如果结果窗口的收敛曲线衰减较快,则表示之前的参数比较有效,因此可填入2000或更大的数目使得网络收敛,否则修改之前的参数)、结果显示频率[show](例如要每隔500次迭代显示结果窗口,则填500)和目标误差[goal](这个与第2步中的“Performance Function”有关,如果使用默认的MSE,则一般满足“goal*样本数量<0.5”就可以了),就可以开始训练了(按钮[Train Network]),如果结果收敛(训练误差不大于目标误差,即蓝色线到达黑色线位置)就OK了。
$ s% b/ G! |# ~+ Q6 J# o; N1 Y" X" U- O0 E9 o
----------------------------------------------------------------------------------------------------------------------------------------------
6 `4 ^$ j5 W9 W后话:上面只介绍了“数据训练”的方法,至于“数据测试”,则点击Simulate按钮就可以了(或者用C++写,也不难,且网上有现成的BP神经网络的程序),这个相对简单,不说了。下面关于特征向量的维数问题和BP网络的个数问题谈谈我的经验。, U$ x3 ?5 K7 J5 j% K! w
Q/ j- ]6 ]% }( ^/ r如果是两类问题,则特征向量维数可以比较小,例如识别4和9时,特征维数(曲率特征)为8便可;但当识别多类问题时(下面以十类为例),则特征维数太少是不足以把各类问题分开的(即使使用十个网络,每个网络为一个两类问题)。如果只设计一个网络,要同时识别10个类,则此时样本数量要足够多。另外,应尽量避免使用十个网络进行分类(注意,这与多级分类问题不一样,多级分类问题可以分为几个两类问题有效处理,而对于十个数字来说是同级多类问题),因为此时会把类间相互约束的信息丢失,造成即使对训练样本收敛(而且往往收敛速度很快)但对测试样本分类不好的情况出现,也就是分类器的推广能力差。 |
|