Back to Annotated Deep Learning Paper Implementations

CIFAR10 Experiment

docs/experiments/cifar10.html

latest3.3 KB
Original Source

homeexperiments

View code on Github

#

CIFAR10 Experiment

10fromtypingimportList1112importtorch.nnasnn1314fromlabmlimportlab15fromlabml.configsimportoption16fromlabml\_nn.helpers.datasetsimportCIFAR10ConfigsasCIFAR10DatasetConfigs17fromlabml\_nn.experiments.mnistimportMNISTConfigs

#

Configurations

This extends from CIFAR 10 dataset configurations and MNISTConfigs.

20classCIFAR10Configs(CIFAR10DatasetConfigs,MNISTConfigs):

#

Use CIFAR10 dataset by default

28dataset\_name:str='CIFAR10'

#

Augmented CIFAR 10 train dataset

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]))

#

Non-augmented CIFAR 10 validation dataset

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]))

#

VGG model for CIFAR-10 classification

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)

labml.ai