(已解决torchvision中CIFAR10下载速度慢)如何下载以及使用torchvision导入


背景

    train_set = torchvision.datasets.CIFAR10(root='./data', train=True,
                                             download=True, transform=transform)

速度超级慢,慢得直接报错:

urllib.error.URLError: urlopen error [Errno 11001] getaddrinfo failed


解决方案

官网下载超级快http://www.cs.toronto.edu/~kriz/cifar.html
下载第一个:

在这里插入图片描述
解压它,然后目录会是这样的

cifar-10-python/cifar-10-batches-py/*

其中*号就是下面这些文件。
在这里插入图片描述
我们只需要将上述文件复制到data目录下:

data/cifar-10-batches-py/*

然后使用torchvision处理,并设置download=False即可。

    train_set = torchvision.datasets.CIFAR10(root='./data', train=True,
                                             download=False, transform=transform)

成功。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
好的,让我来回答你的问题。 首先,我们需要导入必要的库,包括PyTorch、NumPy等: ``` python import torch import torch.nn as nn import torch.optim as optim import numpy as np ``` 接着,我们需要定义一个卷积神经网络。在这个例子,我们定义一个包含两个卷积层和两个全连接层的神经网络。代码如下: ``` python class Net(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(torch.relu(self.conv1(x))) x = self.pool(torch.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = torch.relu(self.fc1(x)) x = torch.relu(self.fc2(x)) x = self.fc3(x) return x ``` 接下来,我们需要定义一些超参数,包括学习率、损失函数、优化器等: ``` python lr = 0.001 criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=lr, momentum=0.9) ``` 然后,我们需要加载CIFAR-10数据集并进行预处理: ``` python from torchvision import datasets, transforms transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) trainset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform) trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2) testset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transform) testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2) ``` 但是由于你不想使用torchvision,我们需要手动加载数据集并进行预处理: ``` python import pickle def load_batch(filename): with open(filename, 'rb') as f: data = pickle.load(f, encoding='bytes') images = data[b'data'] labels = data[b'labels'] images = images.reshape((len(images), 3, 32, 32)) images = images.transpose((0, 2, 3, 1)) labels = np.array(labels) return images, labels def load_data(): train_images = [] train_labels = [] for i in range(1, 6): filename = f'./data_batch_{i}' images, labels = load_batch(filename) train_images.append(images) train_labels.append(labels) train_images = np.concatenate(train_images, axis=0) train_labels = np.concatenate(train_labels, axis=0) test_images, test_labels = load_batch('./test_batch') return train_images, train_labels, test_images, test_labels train_images, train_labels, test_images, test_labels = load_data() train_images = train_images / 255.0 test_images = test_images / 255.0 train_images = torch.from_numpy(train_images).float() train_labels = torch.from_numpy(train_labels).long() test_images = torch.from_numpy(test_images).float() test_labels = torch.from_numpy(test_labels).long() trainset = torch.utils.data.TensorDataset(train_images, train_labels) trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2) testset = torch.utils.data.TensorDataset(test_images, test_labels) testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2) ``` 最后,我们可以开始训练模型了: ``` python for epoch in range(10): running_loss = 0.0 for i, data in enumerate(trainloader, 0): inputs, labels = data optimizer.zero_grad() outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() if i % 2000 == 1999: print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000)) running_loss = 0.0 print('Finished Training') ``` 在训练完成后,我们可以对模型进行测试并输出准确率: ``` python correct = 0 total = 0 with torch.no_grad(): for data in testloader: images, labels = data outputs = net(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print('Accuracy of the network on the 10000 test images: %d %%' % ( 100 * correct / total)) ``` 这就是一个不使用torchvision完成cifar10的卷积神经网络的代码。希望能对你有所帮助!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值