损失不下降 – Pytorch

我在实现一个包含超网络的全卷积网络(FCN)时使用了Dice损失。该模型有两个输入和一个输出,即二值分割图。模型正在更新权重,但损失值保持不变。即使只用三个训练样本,模型也没有过拟合。

我还尝试了其他损失函数,如Dice+二元交叉熵损失、Jaccard损失和MSE损失,但损失值几乎没有变化。我还尝试了几乎所有激活函数,如ReLU、LeakyReLU、Tanh。此外,由于我需要输出在[0,1]范围内,我必须在输出层使用sigmoid函数。学习率为0.01。此外,我还尝试了不同的学习率,如0.0001、0.001、0.1。不管训练开始时的损失是多少,最终总是达到这个值。

这显示了三个训练样本的梯度和总体损失

tensor(0.0010, device='cuda:0')tensor(0.1377, device='cuda:0')tensor(0.1582, device='cuda:0')Epoch 9, Overall loss = 0.9604763123724196, mIOU=0.019766070265581623tensor(0.0014, device='cuda:0')tensor(0.0898, device='cuda:0')tensor(0.0455, device='cuda:0')Epoch 10, Overall loss = 0.9616242945194244, mIOU=0.01919178702228237tensor(0.0886, device='cuda:0')tensor(0.2561, device='cuda:0')tensor(0.0108, device='cuda:0')Epoch 11, Overall loss = 0.960331304506822, mIOU=0.01983801422510155

我希望损失在几个周期内收敛。我应该怎么办?


回答:

@[隐藏人名]

你需要至少提供你的forwardtrain函数的代码,我们才能准确找出问题所在,@[隐藏人名]说的对,机器学习/深度学习代码中可能有很多东西会出错。即使我最近从Keras转到Pytorch,也花了一些时间适应。但这是我会做的事情:

1) 由于你在处理图像,尝试对它们进行一些预处理(旋转、归一化、高斯噪声等)。

2) 在你获取每个批次数据的开始时,对你的优化器清零梯度,并且在你计算损失并调用loss.backward()更新优化器

3) 在你的优化器调用中添加一个权重衰减项,通常是L2,因为你在处理卷积网络,衰减项可以设置为5e-4或5e-5。

4) 在你的优化器中添加一个学习率调度器,以便在长时间没有改进时调整学习率。

我们真的不能在回答中包含代码。这取决于从业者去探索如何实现所有这些。希望这对你有帮助。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注