当前位置: 首页 > 知识库问答 >
问题:

在 PyTorch 中,重复增加和减少精度是否正常?

巫马修为
2023-03-14

我是PyTorch新手,目前正在做一个迁移学习的简单代码。当我训练我的模型时,我在准确性和损失的增加和减少之间得到一个大的变化。我对网络进行了50个纪元的训练,下面是结果:

Epoch [1/50], Loss: 0.5477, Train Accuracy: 63%
Epoch [2/50], Loss: 2.1935, Train Accuracy: 75%
Epoch [3/50], Loss: 1.8811, Train Accuracy: 79%
Epoch [4/50], Loss: 0.0671, Train Accuracy: 77%
Epoch [5/50], Loss: 0.2522, Train Accuracy: 80%
Epoch [6/50], Loss: 0.0962, Train Accuracy: 88%
Epoch [7/50], Loss: 1.8883, Train Accuracy: 74%
Epoch [8/50], Loss: 0.3565, Train Accuracy: 83%
Epoch [9/50], Loss: 0.0228, Train Accuracy: 81%
Epoch [10/50], Loss: 0.0124, Train Accuracy: 81%
Epoch [11/50], Loss: 0.0252, Train Accuracy: 84%
Epoch [12/50], Loss: 0.5184, Train Accuracy: 81%
Epoch [13/50], Loss: 0.1233, Train Accuracy: 86%
Epoch [14/50], Loss: 0.1704, Train Accuracy: 82%
Epoch [15/50], Loss: 2.3164, Train Accuracy: 79%
Epoch [16/50], Loss: 0.0294, Train Accuracy: 85%
Epoch [17/50], Loss: 0.2860, Train Accuracy: 85%
Epoch [18/50], Loss: 1.5114, Train Accuracy: 81%
Epoch [19/50], Loss: 0.1136, Train Accuracy: 86%
Epoch [20/50], Loss: 0.0062, Train Accuracy: 80%
Epoch [21/50], Loss: 0.0748, Train Accuracy: 84%
Epoch [22/50], Loss: 0.1848, Train Accuracy: 84%
Epoch [23/50], Loss: 0.1693, Train Accuracy: 81%
Epoch [24/50], Loss: 0.1297, Train Accuracy: 77%
Epoch [25/50], Loss: 0.1358, Train Accuracy: 78%
Epoch [26/50], Loss: 2.3172, Train Accuracy: 75%
Epoch [27/50], Loss: 0.1772, Train Accuracy: 79%
Epoch [28/50], Loss: 0.0201, Train Accuracy: 80%
Epoch [29/50], Loss: 0.3810, Train Accuracy: 84%
Epoch [30/50], Loss: 0.7281, Train Accuracy: 79%
Epoch [31/50], Loss: 0.1918, Train Accuracy: 81%
Epoch [32/50], Loss: 0.3289, Train Accuracy: 88%
Epoch [33/50], Loss: 1.2363, Train Accuracy: 81%
Epoch [34/50], Loss: 0.0362, Train Accuracy: 89%
Epoch [35/50], Loss: 0.0303, Train Accuracy: 90%
Epoch [36/50], Loss: 1.1700, Train Accuracy: 81%
Epoch [37/50], Loss: 0.0031, Train Accuracy: 81%
Epoch [38/50], Loss: 0.1496, Train Accuracy: 81%
Epoch [39/50], Loss: 0.5070, Train Accuracy: 76%
Epoch [40/50], Loss: 0.1984, Train Accuracy: 77%
Epoch [41/50], Loss: 0.1152, Train Accuracy: 79%
Epoch [42/50], Loss: 0.0603, Train Accuracy: 82%
Epoch [43/50], Loss: 0.2293, Train Accuracy: 84%
Epoch [44/50], Loss: 0.1304, Train Accuracy: 80%
Epoch [45/50], Loss: 0.0381, Train Accuracy: 82%
Epoch [46/50], Loss: 0.1833, Train Accuracy: 84%
Epoch [47/50], Loss: 0.0222, Train Accuracy: 84%
Epoch [48/50], Loss: 0.0010, Train Accuracy: 81%
Epoch [49/50], Loss: 1.0852, Train Accuracy: 79%
Epoch [50/50], Loss: 0.0167, Train Accuracy: 83%

有一些时期比其他时期具有更好的准确性和损失。然而,该模型在以后的时期丢失了它们。据我所知,准确性应该提高每一个时代。我是不是把训练代码写错了?如果不是,那这正常吗?有什么办法解决吗?是否应该保存先前的精度,并且只有在下一个历元的精度大于先前的精度时,才再训练一个历元?我以前一直在做Keras,没有遇到过这个问题。我通过冻结先前的权重和只为最后一层增加两个类来微调当前的图层。以下是我的代码:

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model_conv.fc.parameters(), lr=0.001, momentum=0.9)

num_epochs = 50
for epoch in range (num_epochs):
    #Reset the correct to 0 after passing through all the dataset
    correct = 0
    for images,labels in dataloaders['train']:
        images = Variable(images)
        labels = Variable(labels)
        if torch.cuda.is_available():
            images = images.cuda()
            labels = labels.cuda()

        optimizer.zero_grad()
        outputs = model_conv(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()  
        _, predicted = torch.max(outputs, 1) 
        correct += (predicted == labels).sum()

    train_acc = 100 * correct / dataset_sizes['train']    
    print ('Epoch [{}/{}], Loss: {:.4f}, Train Accuracy: {}%'
            .format(epoch+1, num_epochs, loss.item(), train_acc))

共有2个答案

丁俊智
2023-03-14

PyTorch中准确度反复增加和降低正常吗

与一个历元水平相比,它应该总是下降。与一批水平相比,它可能会波动,但通常随着时间的推移,它会变得更小,因为这是我们最大限度地减少损失的关键点,我们正在提高精度。

商和雅
2023-03-14

我认为这取决于数据集和架构。因此,波动是正常的,但一般来说,损失应该improve.It可能是测试数据集中的噪声造成的,即错误标记的示例。

如果测试精度开始下降,这可能是你的网络过拟合。你可能想在到达那个点之前停止学习,或者采取其他措施来解决过度适应的问题。

 类似资料:
  • 我在文本分类任务中使用Pytorch GRU训练模型(输出维度为5)。我的网络实现如下代码所示。 我用的是nn。损失函数的CrossEntropyLoss()和optim。SGD for optimizer。损失函数和优化器的定义是这样给出的。 我的培训程序大致如下所示。 当我训练这个模型时,验证准确性和损失是这样报告的。 它表明验证损失在第9个epoch之后不会减少,并且验证准确性自第一个epo

  • 我有一个只有完全连接/密集层的深度网络,形状为128-256-512-1024-1024所有层使用激活,没有,最后一层使用激活。 在第20次训练后,验证/测试损失开始逆转并上升,但测试精度也在继续提高。这怎么说得通?如果显示了新的数据,测试的准确性是否准确,或者是否存在某种假阳性? 我这样编译模型:

  • 我的数据: 预期Arr: 我的代码是通过删除重复的来简化模型: 但是我不能和s。 我怎么能做到呢?

  • 问题内容: 如何使用Java增加输出的WAV音频流的音量?我在使用各种Java TTS引擎和合成语音的输出量时遇到问题。有可以用来调高音量的API调用或doo- hickey.jar吗? 问题答案: 如果您使用的是Java Sound API,则可以使用MASTER_GAIN控件设置音量。

  • 我不确定在进行聚合操作时应该增加还是减少分区数量。假设我正在使用pyspark数据框架。。 我知道行转换通常需要更多的分区。而将数据保存到磁盘通常需要fewere分区。 但是,对于聚合,我不清楚在中做什么?? 增加分区数的参数:由于我们必须为聚合而洗牌数据,因此您希望洗牌更少的数据,从而增加分区数,以减小分区的大小。 减少分区数量的论点:IT需要大量开销来收集和计算每个分区。因此,太多的分区将导致