验证损失高,验证准确率高

数据挖掘 神经网络 深度学习 火炬
2022-02-26 07:21:23

我刚刚开始进入深度学习领域,并且使用 PyTorch 完成了我的第一次模型训练。

我决定在自定义数据集上使用来自 torchvision 的预构建模型,更具体地说是 mobilenet_v2 ( https://pytorch.org/docs/stable/_modules/torchvision/models/mobilenet.html#mobilenet_v2 ) 用于二进制分类。

我设法在训练集和测试集上都获得了 100% 的准确率(这个特定的数据集并不难,所以没什么奇怪的)

我不明白的是为什么测试损失似乎比火车损失高几个数量级,而两种情况下的准确率都是 100%。有人可以解释一下这里发生了什么吗?

我在下面向您展示训练数据:

Epoch: 1/15, Train Loss: 0.22990, Train accuracy: 88.48%, Test Loss: 2.10275, Test accuracy: 99.22%

Epoch: 2/15, Train Loss: 0.03988, Train accuracy: 99.41%, Test Loss: 2.08563, Test accuracy: 99.22%

Epoch: 3/15, Train Loss: 0.02211, Train accuracy: 99.41%, Test Loss: 2.05521, Test accuracy: 100.00%

Epoch: 4/15, Train Loss: 0.01173, Train accuracy: 99.80%, Test Loss: 2.05332, Test accuracy: 100.00%

纪元:5/15,训练损失:0.00499,训练准确度:100.00%,测试损失:2.04989,测试准确度:100.00%

纪元:6/15,训练损失:0.00381,训练准确度:100.00%,测试损失:2.04952,测试准确度:100.00%

纪元:7/15,训练损失:0.00171,训练准确度:100.00%,测试损失:2.04999,测试准确度:100.00%

Epoch: 8/15, Train Loss: 0.00072, Train accuracy: 100.00%, Test Loss: 2.04971, Test accuracy: 100.00%

纪元:9/15,训练损失:0.00045,训练准确度:100.00%,测试损失:2.04938,测试准确度:100.00%

纪元:10/15,训练损失:0.00035,训练准确度:100.00%,测试损失:2.04932,测试准确度:100.00%

Epoch: 11/15, Train Loss: 0.00029, Train accuracy: 100.00%, Test Loss: 2.04920, Test accuracy: 100.00%

纪元:12/15,训练损失:0.00025,训练准确度:100.00%,测试损失:2.04922,测试准确度:100.00%

纪元:13/15,训练损失:0.00022,训练准确度:100.00%,测试损失:2.04906,测试准确度:100.00%

纪元:14/15,训练损失:0.00020,训练准确度:100.00%,测试损失:2.04914,测试准确度:100.00%

纪元:15/15,训练损失:0.00018,训练准确度:100.00%,测试损失:2.04905,测试准确度:100.00%

1个回答

在二进制分类中,我们有 0 或 1。您必须在最后一层使用 softmax 函数才能获得输出。它的范围从(0,1)
损失:一般来说,它是预测值和实际值之间的差异。
假设
CASE 1:预测值为 0.6,实际答案为 1。
CASE 2:预测值为 0.9,实际答案为 1。
虽然他们都有正确答案(因为他们都四舍五入为 1),但案例 2 的损失小于情况1。