常见损失下降,精度不升问题

损失函数一直在下降,为什么识别率上不去。

1.最常见的原因:过拟合

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

1.数据量小,网络复杂

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

解决方法主要包括

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

2.利用 dropout层

3.利用正则化

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

图片的话,img/255是肯定的

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

原文链接:https://blog.csdn.net/u013249853/article/details/89393982

  • 42
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 损失函数是机器学习中最重要的概念之一,它用于衡量模型预测结果与真实结果之间的差异。在训练机器学习模型时,我们需要通过不断优化损失函数的值,使得模型的预测结果与真实结果尽可能接近。常见损失函数包括均方误差、交叉熵、对数损失等。均方误差主要用于回归问题,通过计算预测值和真实值之间的平方差来评估模型的表现。交叉熵和对数损失则主要用于分类问题,通过计算预测概率分布与真实标签之间的差异来评估模型性能。在实际应用中,我们需要根据具体的问题和数据集选择合适的损失函数,并使用优化算法不断调整模型参数以最小化损失函数的值,从而提高模型的预测精度。 ### 回答2: 损失函数是机器学习中用来评估模型预测结果与实际观测值之间差异的函数。其作用是衡量模型的预测准确度,并用于优化算法的目标函数。 常见损失函数包括均方误差(MSE)、交叉熵损失函数等。均方误差是回归问题中常用的损失函数,它计算预测值与实际观测值之间的差异的平方和。交叉熵损失函数则主要应用于分类问题,它通过计算预测值与实际观测值之间的交叉熵来度量两者之间的差异。 损失函数的选择通常依赖于具体的问题类型和模型特点。例如,在回归问题中,若观测值存在离群点,则均方误差容易受到极端值的影响,此时可以选择其他鲁棒性更好的损失函数,如平均绝对误差等。而在二分类问题中,交叉熵损失函数则能更好地度量模型输出与真实标签的匹配程度。 在模型训练过程中,我们通过最小化损失函数来优化模型参数,以使模型在训练集上的预测结果与真实观测值尽可能接近,从而提高模型的泛化能力和准确度。优化算法通常使用梯度下降等方法来寻找损失函数的最小值点,使模型能够学习到更好的参数取值。 总之,损失函数是机器学习中非常重要的概念,它能够度量模型预测结果与实际观测值之间的差异,并通过优化算法来提高模型的性能。通过选择合适的损失函数,并结合有效的优化算法,我们可以构建出更准确和鲁棒的机器学习模型。 ### 回答3: 损失函数(loss function)是机器学习领域中的重要概念之一,用于衡量模型的预测值与真实值之间的差异。 在监督学习中,我们通常会给定训练数据集,其中包含输入样本及其对应的真实标签。损失函数的目标就是通过最小化预测值与真实值之间的差距,来指导模型的优化。 常见损失函数包括均方误差(Mean Squared Error,MSE),交叉熵(Cross Entropy)等。均方误差是其中最常见的一种,其计算方式为预测值与真实值之差的平方的均值。均方误差对于异常值比较敏感,因此在处理异常值较多的情况下不太适用。而交叉熵则可以更好地应对分类问题。 对于不同类型的问题,我们可以选择合适的损失函数。例如,在回归问题中,均方误差通常是较为常用的选择;而在分类问题中,交叉熵往往更加适合。 值得注意的是,损失函数的选择会直接影响模型的训练效果。一个合适的损失函数能够帮助模型更好地适应数据,并提高预测的准确性。因此,在实际应用中,我们需要根据具体问题的需求、数据的特点来选择合适的损失函数,并结合其他优化算法来最小化损失函数,从而得到更好的模型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值