【问题标题】:How to improve cats and dogs classification using CNN with pytorch如何使用 CNN 和 pytorch 改进猫狗分类
【发布时间】:2019-12-31 07:30:40
【问题描述】:

我尝试遵循本文中的 CNN 架构,ImageNet Classification with Deep Convolutional Neural Networks (https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)。在本文中,他们尝试对 1000 个类别进行分类,而我只是尝试对 2 个类别进行分类。

但是,我的测试准确率停留在 50%,而且模型没有学习。

我正在用 23K 的猫狗图像进行训练,并用 2500 张图像进行测试。

这是我的笔记本的 URL https://github.com/jinglescode/workspace/blob/master/my-journey-computer-vision/codes/Cats_and_Dogs.ipynb

谁能告诉我怎么了?我错过了什么?愿意学习。

【问题讨论】:

  • 标准化将有助于获得更好的结果。我认为您还应该再次考虑您的数据增强:我不确定进行水平翻转或 30° 旋转是否有帮助
  • @akhetos 感谢您的意见,Shai 和您提到了标准化,我做到了。查看我更新的笔记本 [github.com/jinglescode/workspace/blob/master/…。我还删除了增强功能以​​使事情变得更简单。还有什么想法吗?
  • 我不知道 pytorch 语法也没有时间去理解它,但首先要检查你的模型形状。在 keras 中,这可以通过 model.summary() 完成。如果归一化后仍然有 50% 的准确率,主要问题可能来自您的模型架构而不是学习率

标签: python machine-learning deep-learning conv-neural-network pytorch


【解决方案1】:

Normalize your data!!

对于图像数据,您可以使用recommended transform 来训练和测试数据集

normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                     std=[0.229, 0.224, 0.225])
train_transforms = transforms.Compose([transforms.RandomRotation(30),
                                       transforms.RandomResizedCrop(224),
                                       transforms.RandomHorizontalFlip(),
                                       transforms.ToTensor(),
                                       normalize]) 

test_transforms = transforms.Compose([transforms.Resize(255),
                                      transforms.CenterCrop(224),
                                      transforms.ToTensor(),
                                      normalize])

其他 cmets:

  1. 如果您想“窥视”数据加载器,则实例化 next(iter(dataloader))not a good idea。相反,您可以访问存储在数据加载器中的数据集并使用其__getitem__

     images, labels = dataloader.dataset[0]
    
  2. 如果你的训练“卡住”了,通常的第一反应是改变学习率

【讨论】:

  • 谢谢@Shai,我已经像你说的那样对数据进行了标准化,并使用for images, labels in trainloader 来遍历数据集。更新笔记本 [github.com/jinglescode/workspace/blob/master/… 在论文中,他们提到当验证没有提高时,学习率除以 10。而我使用的是 Adam(从 0.01 开始)。对此有什么想法吗?
猜你喜欢
  • 2019-09-17
  • 1970-01-01
  • 2018-08-29
  • 2020-05-08
  • 2020-06-07
  • 2020-05-07
  • 2021-06-09
  • 2019-11-20
  • 1970-01-01
相关资源
最近更新 更多