Matlab实现图像识别(十)

接下来就是参数选择的问题。

什么是参数选择的问题呢?例如如果你把720x720的图片放进去,隐藏层都几个G了,这个自然是不行的。

在本次实验中,我一开始用了5000个隐藏节点,结果,训练一次这个隐藏层就需要1分钟的时间,自然是不可以的,因为我还要训练一万次,没法调Bug啊,这个时间绝对不行。

因此图像的大小选择是十分慎重的,因为如果只是28x28像素的话,总的也才784个节点,如果是60x80的话,就会陡增至4800个节点。计算机的算力吃不消。当初我做minst的时候,输入784个节点,隐藏层也就100~150个节点,输出为10个,大概能花上几分钟的时间就可以运行完毕。那么如果本次的用4800个节点,500个隐藏层节点,输出为101,那么时间可能花上几倍的时间。

就是说,在训练的时候,可以选取更小的节点,确保其本身的确是下降的,如果你设计的一个网络,光运行就花费三个小时,那么你若认清它不是下降的,就至少花费6个小时,因此用更小的节点先进行测试,确保它没有什么关系后,可以用更大的序列计算。

参数初始化的时候不可以初始化为0,因为在反向传播的时候就都变成0了,根本不会有任何变化。

很明显的是,虽然一开始都很小,但是自从第一轮开始,它的输出就会变成200多,再激活就是1了,这种情况是不是对的呢?自然是不对的,常理情况下,每一个输出节点,输出到隐藏层后,它应该是-11之间,然后激活一下,还是在-11之间,因此,在最开始初始化的时候,虽然把参数都初始化为-11之间,但是还是要再除以个上一层的节点个数,这样总和一加,仍能保持在-11之间,不会猛增至几百,最后NAN根本就不是数了。

实际上,并不是说除以前一个节点的个数就行,因为每一个数是0~1之间,它并不是1,因此总和加起来,它应该会更小,大概会小一个数量级,因此最好除以个个数的一半,或者更小一些,让最后结果维持在零点几,而不是零点零几这个范围。这个非常重要,参数初始化不对,可能根本就不会下降的。

不同的激活函数,它们的参数初始化是不一样的,例如sigmoid函数,因为它要求输入应该在-11之间,因此在设计参数时,它的确能保证输入值能限制在-11之间,又比如ReLU函数,它的特点是正数取正数,负数取零,如果你的参数都预处理为正数,你的输入也都是正数,那么ReLUctant函数就会失效,从而整个神经网络转变为一个多项式级别的了,可能根本都不收敛,因此在初始化的时候,应该保证正数和负数最好是一半一半。

因此,小心调参,防止NaN,就是这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值