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
| import torch.optim import torchvision from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential from torch.utils.data import DataLoader
''' 加载数据 ''' dataset = torchvision.datasets.CIFAR10( root="./dataset", train=False, download=False, transform=torchvision.transforms.ToTensor() )
dataloader = DataLoader(dataset, batch_size=64)
class Cifar(nn.Module): ''' 创建网络 '''
def __init__(self): super(Cifar, self).__init__() self.model1 = Sequential( Conv2d(in_channels=3, out_channels=32, kernel_size=5, stride=1, padding=2), MaxPool2d(kernel_size=2), Conv2d(in_channels=32, out_channels=32, kernel_size=5, stride=1, padding=2), MaxPool2d(kernel_size=2), Conv2d(in_channels=32, out_channels=64, kernel_size=5, stride=1, padding=2), MaxPool2d(kernel_size=2), Flatten(), Linear(in_features=64 * 4 * 4, out_features=64), Linear(in_features=64, out_features=10), )
def forward(self, x): x = self.model1(x) return x
''' 实例化网络 选择损失函数 优化器 ''' my_net = Cifar() loss = nn.CrossEntropyLoss() optim = torch.optim.SGD(my_net.parameters(), lr=0.01)
''' 开始训练 ''' epochs = 20 for epoch in range(epochs): running_loss = 0.0 for data in dataloader: ''' network ''' imgs, targets = data outputs = my_net(imgs)
''' loss function ''' res_loss = loss(outputs, targets)
''' zero_grad ''' optim.zero_grad()
''' backward ''' res_loss.backward()
''' optim_step updated ''' optim.step()
''' each epoch loss sum ''' running_loss += res_loss
print("every epoch, the loss is: {}".format(running_loss))
|