十个缘由可能致使 训练集明明很高,验证集,测试集 validation accuracy stuck 准确率 很低 损失不减少

损失函数一直在降低,为何识别率上不去。git

1.最多见的缘由:过拟合

过拟合值得单独开个章节。主要包括github

1.数据量小,网络复杂数据库

2.learning rate 比较高,又没有设置任何防止过拟合的机制网络

解决方法主要包括函数

1.简化模型,利用现有深度学习手段增长数据(翻转,平移,随机裁剪,imgaug)post

2.利用 dropout层学习

3.利用正则化.net

2.你犯了错误:没有把数据规格化

图片的话,img/255是确定的orm

3.你犯了错误:没有在分验证集以前打乱数据

由于validation_split操做不会为你shuffle数据,因此若是你的数据前一半标签全是1 ,后一半全是0,validation=0.5。恭喜你,你压根也分不对,你的validation准确率会一直为0.由于你拿全部的正样本训练,却想判断负样本。图片

4.你犯了错误,数据和标签没有对上

有可能再读取自定义的数据库的时候出现问题,致使数据与标注不对应。好比第一张图片用第十张的标注

5.你的训练数据太少,validation数据太多,类别也太多

好比4000张训练,1000张validation,300类,这显然就是不合理的

6.最好使用预训练的权重

大多数流行的backone好比resnet都有再imagenet数据集上与训练过,那么使用这种权重,比起随即从新训练,显然要可靠很多注意调整学习率。

7.网络结构有问题

能够经过使用如今流行的网络(resnet,unet等)替入你的代码,若是结果没有问题,你的结果有问题那么确定就是你网络结构出问题了。那么能够经过逐层注释掉排查究竟哪里出了问题

7.1 网络最后一层没有使用正确的激活函数

好比多类的应该使用softmax

8.relu后面是softmax

有一些说法是relu因为对于很大的数值直接复制,因此会对softmax产生很差的影响,从而输出很差的结果。因此可使用tanh代替relu。

9.batch normalization须要batch size至少16张

https://mp.csdn.net/postedit/89456400

因为作dense prediction图片一般比较大。因此一个batch通常都只有1-2张图片,不建议使用 BN。

由于BN通常是16张图片以上一块儿跑。因此吧,若是是BN,那么请用多GPU,16以上的batch size。s

另外keras TF1.x可能会出问题,https://github.com/keras-team/keras/pull/9965

10.你犯了错误,你可能设置了一些参数是不可训练的

在训练语句以前,检查如下你的trainable参数,是否设置了一些参数是不可训练的。这还可能致使你的输出只能是一个值,好比永远预测为标注0,由于你只有一点点的参数,而这并非一个模型(好比只有100个参数是能够训练的,太简单了,没法模拟)。

 

11.附送一个调参论文

Bag of Tricks for Image Classification with Convolutional Neural Networks

https://arxiv.org/abs/1812.01187

NLP 独有错误 

最傻的错误,好比train和val使用了不同的字典,那效果能好才怪了。。。。