HimankJ commited on
Commit
0393746
·
verified ·
1 Parent(s): 6acd192

Added resnet 18 model

Browse files
Files changed (1) hide show
  1. model.py +68 -0
model.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch.nn as nn
2
+ import torch.nn.functional as F
3
+
4
+
5
+ class BasicBlock(nn.Module):
6
+ expansion = 1
7
+
8
+ def __init__(self, in_planes, planes, stride=1):
9
+ super(BasicBlock, self).__init__()
10
+ self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False)
11
+ self.bn1 = nn.BatchNorm2d(planes)
12
+ self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=1, padding=1, bias=False)
13
+ self.bn2 = nn.BatchNorm2d(planes)
14
+
15
+ self.shortcut = nn.Sequential()
16
+ if stride != 1 or in_planes != self.expansion*planes:
17
+ self.shortcut = nn.Sequential(
18
+ nn.Conv2d(in_planes, self.expansion*planes, kernel_size=1, stride=stride, bias=False),
19
+ nn.BatchNorm2d(self.expansion*planes)
20
+ )
21
+
22
+ def forward(self, x):
23
+ out = F.relu(self.bn1(self.conv1(x)))
24
+ out = self.bn2(self.conv2(out))
25
+ out += self.shortcut(x)
26
+ out = F.relu(out)
27
+ return out
28
+
29
+
30
+ class ResNet(nn.Module):
31
+ def __init__(self, block, num_blocks, num_classes=10):
32
+ super(ResNet, self).__init__()
33
+ self.in_planes = 64
34
+
35
+ self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False)
36
+ self.bn1 = nn.BatchNorm2d(64)
37
+ self.layer1 = self._make_layer(block, 64, num_blocks[0], stride=1)
38
+ self.layer2 = self._make_layer(block, 128, num_blocks[1], stride=2)
39
+ self.layer3 = self._make_layer(block, 256, num_blocks[2], stride=2)
40
+ self.layer4 = self._make_layer(block, 512, num_blocks[3], stride=2)
41
+ self.linear = nn.Linear(512*block.expansion, num_classes)
42
+
43
+ def _make_layer(self, block, planes, num_blocks, stride):
44
+ strides = [stride] + [1]*(num_blocks-1)
45
+ layers = []
46
+ for stride in strides:
47
+ layers.append(block(self.in_planes, planes, stride))
48
+ self.in_planes = planes * block.expansion
49
+ return nn.Sequential(*layers)
50
+
51
+ def forward(self, x):
52
+ out = F.relu(self.bn1(self.conv1(x)))
53
+ out = self.layer1(out)
54
+ out = self.layer2(out)
55
+ out = self.layer3(out)
56
+ out = self.layer4(out)
57
+ out = F.avg_pool2d(out, 4)
58
+ out = out.view(out.size(0), -1)
59
+ out = self.linear(out)
60
+ return out
61
+
62
+
63
+ def ResNet18():
64
+ return ResNet(BasicBlock, [2, 2, 2, 2])
65
+
66
+
67
+ def ResNet34():
68
+ return ResNet(BasicBlock, [3, 4, 6, 3])