网络容量
可以认为与网络中的可训练参数成正比
网络中的神经单元数越多,层数越多,神经网络的拟合能力越强。但是训练速度、难度会变大,越容易产生过拟合。
超参数: 在搭建神经网络中,需要我们自己选择(不是通过梯度下降算法去优化)的那些参数。比如中间层的神经元个数、学习速率。
如何提高网络的拟合能力
一种明显的做法就是增大网络容量:
1、增加层 :大大提高网络的拟合能力。这也是深度学习的层数越来越深的原因。
2、增加隐藏神经元个数:对于网络的提高并不明显。
注意:单层的神经元个数也不能太少,太少的话,会造成信息瓶颈,使得模型欠拟合。
# 在训练的时候同时验证测试集
validation_data = (test_image, test_onehot)
# 在history的keys中就会有四个字段如loss,acc,val_loss, val_acc
# 可以使用plt画出loss和acc曲线去分析。
plt.plot(history.epoch, history.history.get('loss'), label='loss')
plt.plot(history.epoch, history.history.get('val_loss'), label='val_loss')
plt.legend()
过拟合: 在训练集上得分很高,在测试集上得分比较低。
欠拟合: 在训练集上得分比较低,在测试集上得分也比较低。
使用Dropout抑制过拟合
(1)取平均的作用;
(2)减少了神经元之间复杂的共适应关系;
(3)Dropout类似于性别在生物进化中的角色。
参数选择原则
理想的模型是刚好在欠拟合和过拟合的界线上,也就是正好拟合数据。
首先开发一个过拟合模型:
(1)添加更多的层;
(2)让每一层隐藏单元数更多;
(3)训练更多的轮次。
然后抑制过拟合:最好办法增加训练数据
(1)dropout
(2)正则化
(3)图像增强
再次调节参数:
学习速率;
隐藏单元数;
训练轮次。
构建网络的总原则:
1、增大网络容量;
2、采取措施抑制过拟合;
3、继续增大网络容量,直到过拟合。