1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| import torch as t import torch.nn as nn import torch.nn.functional as F import torchvision as tv import torchvision.transforms as transforms from torch import optim from torchvision.transforms import ToPILImage
show = ToPILImage()
transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), ])
trainset = tv.datasets.CIFAR10( root='/home/abnerwang/tmp/data/', train=True, transform=transform)
trainloader = t.utils.data.DataLoader( trainset, batch_size=4, shuffle=True, num_workers=2)
testset = tv.datasets.CIFAR10( '/home/abnerwang/tmp/data', train=False, transform=transform)
testloader = t.utils.data.DataLoader( testset, batch_size=4, shuffle=False, num_workers=2)
classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) 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 = F.max_pool2d(F.relu(self.conv1(x)), (2, 2)) x = F.max_pool2d(F.relu(self.conv2(x)), 2) x = x.view(x.size()[0], -1) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x
net = Net() criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
device = t.device("cuda:0" if t.cuda.is_available() else "cpu") net.to(device)
for epoch in range(10):
running_loss = 0.0 for i, data in enumerate(trainloader, 0): images, labels = data images = images.to(device) labels = labels.to(device)
optimizer.zero_grad()
outputs = net(images) 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')
correct = 0 total = 0
with t.no_grad(): for data in testloader: images, labels = data images = images.to(device) labels = labels.to(device)
outputs = net(images) _, predicted = t.max(outputs, 1) total += labels.size(0) correct += (predicted == labels).sum()
print('10000 张测试集中的准确率为: %d %%' % (100 * correct / total))
|