在学习了吴恩达的课程以后,把吴老师讲解的调参方法用到实验中,感觉有了方向,节省了很多时间。写点笔记,记录一下实验心得。以下有部分是个人理解,有疑问的欢迎交流。
一,设置与调整网络结构的方向
1.1 网络结构的初始设置
神经网络是为了拟合函数的
- 如果我们提出的模型比较简单,也就是说我们想要拟合的函数比较简单,就不需要那么多的参数去拟合函数,那么我们应该相对的把网络结构的层数,神经元个数也设置少一些。
- 相对的,如果我们提出的模型比较复杂,功能比较多(一般建议模型只有一个功能就好),那么我们想要拟合的函数也就比较复杂,于是需要拟合函数的参数也就要多一些,我们也相应的需要把网络的层数,神经元个数设置的多一些。
1.2调整网络结构
理论上来说,只要加对了正则项(正则化或dropout),那么网络层数深一些,神经单元多一些,那么影响就是需要学习的时间长一些,可能也会有过拟合的情况。这就需要结合调参策略了。
- 训练集准确率高,测试集准确率低,很明显就是过拟合了,如果已经加了正则项,那么我可以放心的减少网络层数,减少神经元个数,降低学习时间,试着能不能降低方差。
- 训练集准确率跟测试集准确率差不多,如果对结果还是不满意,也就是偏差比较大,那就说明网络没有很好地拟合想要的函数,需要增加网络层数以及神经元个数。
理论上说,增加网络复杂度以后,准确率应该会提升, 如果没有提升,那就要考虑是模型出了问题,就要考虑换一个模型了。
二、在不同的情况下,设置网路结构调整网络结构
根据上面的讲解,基本就可以在做实验的时候,有一个大致方向了,在正确方向的指导下,就会节省时间了。
神经网络层数,每层神经单元的个数的设置,分几种情况:
2.1、领域相同,数据集相似
这种情况,可以直接参考论文结构就行了。
2.2、领域不同,参考论文结构
这种情况,不能单纯的就照搬论文结构了,要分析自己的数据集相对于论文来说,是大还是小,分析数据集是稠密还是稀疏。当然,还是得试,要在上面的1.2指导下,慢慢调整网络结构。
2.3、在领域中,自己提出的一个模型
按照上述的1.1跟1.2的顺序,慢慢学习出一个合理的模型。