【问题标题】:Improve CNN model's accuracy for clasifying fruits - Pytorch提高 CNN 模型对水果分类的准确性 - Pytorch
【发布时间】:2021-11-24 13:20:55
【问题描述】:

我需要用 3600 张训练图像和 900 张测试图像对樱桃、草莓和番茄进行分类。但是,我的模型表现不佳且过拟合。我尝试了 weight_decay 以避免过度拟合,但模型给出了形状不合适的错误。我的训练准确率为 85%,测试准确率为 60%。

这大概是我的训练数据,它们都在 300x300 像素左右

转换:

train_transform = transforms.Compose([
        transforms.RandomRotation(10),
        transforms.RandomHorizontalFlip(),
        transforms.Resize(224),  
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406],
                             [0.229, 0.224, 0.225])
    ])

test_transform = transforms.Compose([
        transforms.Resize(224),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406],
                             [0.229, 0.224, 0.225])
    ])

型号:

Batch_size = 100
epoch = 8
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(CNNmodel.parameters(), lr=0.001)

class ConvolutionalNetwork(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 6, 3, 1)
        self.conv2 = nn.Conv2d(6, 16, 3, 1)
        self.fc1 = nn.Linear(54*54*16, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 3)

    def forward(self, X):
        X = F.relu(self.conv1(X))
        X = F.max_pool2d(X, 2, 2) #kernel size 2, stride 2, padding tbc
        X = F.relu(self.conv2(X))
        X = F.max_pool2d(X, 2, 2)
        X = X.view(-1, 54*54*16)
        X = F.relu(self.fc1(X))
        X = F.relu(self.fc2(X))
        X = self.fc3(X)
        return F.log_softmax(X, dim=1)

【问题讨论】:

  • 对不起,只是我计算的准确率有误。更新后的准确率是 85% 的训练集和 60% 的测试集。
  • 只是好奇你在这次训练中使用了哪个损失函数?
  • 我使用:criteria = nn.CrossEntropyLoss() 和优化器 = torch.optim.Adam(CNNmodel.parameters(), lr=0.001)
  • 你应该使用提前停止。

标签: pytorch conv-neural-network


【解决方案1】:

您的方法中最严重的错误是您从头开始训练 NN,而不是微调已经在 ImageNet 上训练的模型。

查看https://pytorch.org/tutorials/beginner/finetuning_torchvision_models_tutorial.html

【讨论】:

  • 谢谢!我会尝试那些预先训练好的模型
  • @Punpun 不客气。如果此答案有帮助,请记得 +1 或“接受”。
猜你喜欢
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 2022-10-15
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
相关资源
最近更新 更多