把数据集随机分为训练集,验证集和测试集,然后用训练集训练模型,用验证集验证模型,根据情况不断调整模型,选择出其中最好的模型,再用训练集和验证集数据训练出一个最终的模型,最后用测试集评估最终的模型
训练集(Training Set):用于训练模型。
验证集(Validation Set):用于调整和选择模型。
测试集(Test Set):用于评估最终的模型。
<>train loss不断下降,test loss不断下降,说明网络仍在学习
<>train loss 不断下降,test loss趋于不变,说明网络过拟合
1.适当的正则化和降维
2.适当降低模型的规模
3.获取更多的数据集
<>train loss 趋于不变,test loss不断下降,说明数据集有问题
<>train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或改变批量数目; (batch=50,
lr=0.001改成100和0.0001)
<>train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。
训练集loss不下降:
1.模型结构和特征工程存在问题
2.权重初始化方案有问题。
常用的初始化方案有全零初始化、随机正态分布初始化和随机均匀分布初始化等。建议无脑xaiver normal初始化或者 he normal
3.正则化过度。
L1
L2和Dropout是防止过拟合用的,当训练集loss下不来时,就要考虑一下是不是正则化过度,导致模型欠拟合了。建议bn,他也有一定的防止过拟合的能力。
4.选择合适的激活函数、损失函数
卷积神经网络中,卷积层的输出,一般使用ReLu作为激活函数,因为可以有效避免梯度消失,并且线性函数在计算性能上面更加有优势。而循环神经网络中的循环层一般为tanh,或者ReLu,全连接层也多用ReLu,只有在神经网络的输出层,使用全连接层来分类的情况下,才会使用softmax这种激活函数。
而损失函数,对于一些分类任务,通常使用交叉熵损失函数,回归任务使用均方误差,有自动对齐的任务使用CTC
loss等。损失函数相当于模型拟合程度的一个评价指标,这个指标的结果越小越好。一个好的损失函数,可以在神经网络优化时,产生更好的模型参数。
5.选择合适的优化器和学习速率
6.训练时间不足
7.模型训练遇到瓶颈
这里的瓶颈一般包括:梯度消失、大量神经元失活、梯度爆炸和弥散、学习率过大或过小等。
8.batch size过大
batch size过小,会导致模型后期摇摆不定,迟迟难以收敛,而过大时,模型前期由于梯度的平均,导致收敛速度过慢。一般batch size
的大小常常选取为32,或者16,有些任务下比如NLP中,可以选取8作为一批数据的个数。
9.数据集未打乱
10.数据集有问题
当一个数据集噪声过多,或者数据标注有大量错误时,会使得神经网络难以从中学到有用的信息,从而出现摇摆不定的情况。
11.未进行归一化
12.特征工程中对数据特征的选取有问题
测试集loss不下降:
1.应用场景不一致
2.噪声问题