docs/experiments/cifar10.html
10fromtypingimportList1112importtorch.nnasnn1314fromlabmlimportlab15fromlabml.configsimportoption16fromlabml\_nn.helpers.datasetsimportCIFAR10ConfigsasCIFAR10DatasetConfigs17fromlabml\_nn.experiments.mnistimportMNISTConfigs
This extends from CIFAR 10 dataset configurations and MNISTConfigs.
20classCIFAR10Configs(CIFAR10DatasetConfigs,MNISTConfigs):
Use CIFAR10 dataset by default
28dataset\_name:str='CIFAR10'
31@option(CIFAR10Configs.train\_dataset)32defcifar10\_train\_augmented():
36fromtorchvision.datasetsimportCIFAR1037fromtorchvision.transformsimporttransforms38returnCIFAR10(str(lab.get\_data\_path()),39train=True,40download=True,41transform=transforms.Compose([
Pad and crop
43transforms.RandomCrop(32,padding=4),
Random horizontal flip
45transforms.RandomHorizontalFlip(),
47transforms.ToTensor(),48transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))49]))
52@option(CIFAR10Configs.valid\_dataset)53defcifar10\_valid\_no\_augment():
57fromtorchvision.datasetsimportCIFAR1058fromtorchvision.transformsimporttransforms59returnCIFAR10(str(lab.get\_data\_path()),60train=False,61download=True,62transform=transforms.Compose([63transforms.ToTensor(),64transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))65]))
68classCIFAR10VGGModel(nn.Module):
Convolution and activation combined
73defconv\_block(self,in\_channels,out\_channels)-\>nn.Module:
77returnnn.Sequential(78nn.Conv2d(in\_channels,out\_channels,kernel\_size=3,padding=1),79nn.ReLU(inplace=True),80)
82def\_\_init\_\_(self,blocks:List[List[int]]):83super().\_\_init\_\_()
5 2×2 pooling layers will produce a output of size 1 times1. CIFAR 10 image size is 32×32
87assertlen(blocks)==588layers=[]
RGB channels
90in\_channels=3
Number of channels in each layer in each block
92forblockinblocks:
Convolution, Normalization and Activation layers
94forchannelsinblock:95layers+=self.conv\_block(in\_channels,channels)96in\_channels=channels
Max pooling at end of each block
98layers+=[nn.MaxPool2d(kernel\_size=2,stride=2)]
Create a sequential model with the layers
101self.layers=nn.Sequential(\*layers)
Final logits layer
103self.fc=nn.Linear(in\_channels,10)
105defforward(self,x):
The VGG layers
107x=self.layers(x)
Reshape for classification layer
109x=x.view(x.shape[0],-1)
Final linear layer
111returnself.fc(x)