Pytorch:开始时损失值很高,但最终损失收敛。我不知道模型是否可以从损失 > 100 开始。帮助!

数据挖掘 机器学习 深度学习 美国有线电视新闻网 火炬 迁移学习
2022-03-14 01:26:34

我一直在尝试使用迁移学习方法进行植物病害检测。我首先选择了 ResNet50。我还执行了一个基线模型,它是一个 CNN 模型。在 resnet50 中,我使用了交叉熵损失并训练了 30 个 epoch 的模型。我也做了批量标准化。最初 epoch 1 损失为 112.5250,训练损失为 87.512。但是,对于最后一个 epoch,它是 2.1660,验证损失是 1.8905,验证准确度是 0.995。模型的整体准确率为 98.8%,模型似乎也没有过拟合。

在训练模型之前,我进行了超参数优化,使用贝叶斯优化优化了学习率和动量。我使用交叉验证优化了重量衰减。我执行了批量标准化。在此之前,我在没有任何优化的情况下训练了模型。我只是假设学习率为 0.001,相同的损失函数并训练了 30 个 epoch。在这种情况下,模型开始时的损失值为 114.2,验证损失为 130.46。它以 97% 的准确率收敛到 9.9038。

所以,我的问题是,模型有可能以如此高的损失值开始,尽管最后给出了很好的准确性?损失的大小与模型的正确性和准确性无关吗?如果模型开始时损失巨大,但准确率很高,那么我的模型是否不好?

前 5 个时期

EPOCH: 1 

Epoch time taken: 28.61398434638977 seconds. Epoch 1 loss: 118.5250 Validation loss: 87.5214 Validation accuracy: 0.753

EPOCH: 2 

Epoch time taken: 28.737553358078003 seconds. Epoch 2 loss: 68.8141 Validation loss: 50.3452 Validation accuracy: 0.858

EPOCH: 3 

Epoch time taken: 28.45273518562317 seconds. Epoch 3 loss: 41.5181 Validation loss: 31.1520 Validation accuracy: 0.928

EPOCH: 4 

Epoch time taken: 28.434630155563354 seconds. Epoch 4 loss: 26.8844 Validation loss: 21.1203 Validation accuracy: 0.948

EPOCH: 5 

Epoch time taken: 28.762181282043457 seconds. Epoch 5 loss: 19.3646 Validation loss: 15.4843 Validation accuracy: 0.955

过去 5 个时期

EPOCH: 26 

Epoch time taken: 28.35645818710327 seconds. Epoch 26 loss: 2.8168 Validation loss: 2.2771 Validation accuracy: 0.990

EPOCH: 27 

Epoch time taken: 28.51978588104248 seconds. Epoch 27 loss: 3.3986 Validation loss: 2.2274 Validation accuracy: 0.992

EPOCH: 28 

Epoch time taken: 28.51390767097473 seconds. Epoch 28 loss: 2.2707 Validation loss: 1.9976 Validation accuracy: 0.992

EPOCH: 29 

Epoch time taken: 28.456573247909546 seconds. Epoch 29 loss: 2.5344 Validation loss: 1.9272 Validation accuracy: 0.990

EPOCH: 30 

Epoch time taken: 28.486974239349365 seconds. Epoch 30 loss: 2.1660 Validation loss: 1.8905 Validation accuracy: 0.995
```
1个回答

第一个时期的损失值是无关紧要的。网络权重是随机初始化的,因此完全可以预期网络的行为与期望的行为不同。

但是,这并不意味着您应该只查看训练和验证损失的最后一个值。相反,您应该绘制整个曲线,以了解训练动态。从曲线中,你可以看到你的网络是过拟合还是欠拟合,如果你训练模型的时间更长,是否还有改进的空间,等等。

这个站点上有很多关于如何解释训练/验证曲线的问题(例如thisthis)。您可以查看它们以了解如何解释您的。从您发布的值来看,如果您训练更多时期,似乎仍有改进的空间。