某种程度上,我在cifar10上的准确性非常低?

时间:2019-11-27 09:46:17

标签: gpu pytorch

with torch.no_grad():
    for data in test_loader:
        images,labels = data
        images, labels = images.to(device), labels.to(device)
        outputs, features = net(images)
        _ , predicted = torch.max(outputs,1)
        total += labels.size(0)
        correct += (predicted==labels).sum().item()
    print('Accuracy of the network on the 10000 test images: %d %%' % (
            100 * (correct / total)))

如何获得带有标签的GPU结果?
我的准确率几乎达到10%,但我最初的训练是准确率达到70%。

1 个答案:

答案 0 :(得分:1)

精确训练数据集(cifar10)并获得更高准确性的技巧是使用数据增强。

最初cifar10拥有50.000张训练图像和10.000张验证图像。

如果您在训练时不增强图像,则会过分适应。训练精度将比验证精度大得多。

所以您的目标是减少过度拟合

减少过度拟合的最佳方法是训练更多数据(增强数据)。 这是一个repo,可以帮助您处理PyTorch中的增强操作。

然后在PyTorch check these中扩展数据,例如RandomRotation,Resize,RandomVerticalFlip,RandomSizedCrop,...

原生PyTorch转换的一个示例可能看起来像:

t = transforms.Compose([transforms.RandomHorizontalFlip(),
                       transforms.ToTensor(),
                       transforms.RandomErasing(),
                       transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))]
                       )

dl_train = DataLoader( torchvision.datasets.CIFAR10('/data/cifar10', download=True, train=True, transform=t), 
                batch_size=bs, shuffle=True)
dl_valid = DataLoader( torchvision.datasets.CIFAR10('/data/cifar10', download=True, train=False, transform=t), 
                batch_size=bs, shuffle=True)