Created
November 9, 2020 11:42
-
-
Save seanbenhur/108f2dae2ac1fed910e2115c8bf30f97 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class InceptionNet(nn.Module): | |
def __init__(self,aux_logits=True,num_classes=1000): | |
super(InceptionNet, self).__init__() | |
assert aux_logits == True or aux_logits == False | |
self.aux_logits = aux_logits | |
self.conv1 = conv_block(in_channels=3,out_channels=64,kernel_size=(7,7), | |
stride=(2,2), padding=(3,3)) | |
self.maxpool1 = nn.MaxPool2d(kernel_size=3,stride=2, padding=1) | |
self.conv2 = conv_block(64, 192, kernel_size=3, stride=1, padding=1) | |
self.maxpool2 = nn.MaxPool2d(kernel_size=3,stride=2, padding=1) | |
# In this order: in_channels, out_1x1, red_3x3, out_3x3, red_5x5, out_5x5, out_1x1pool | |
self.inception3a = Inception_block(192, 64, 96, 128, 16, 32, 32) | |
self.inception3b = Inception_block(256, 128, 128, 192, 32, 96, 64) | |
self.maxpool3 = nn.MaxPool2d(kernel_size=(3,3),stride=2, padding=1) | |
self.inception4a = Inception_block(480, 192, 96, 208, 16, 48, 64) | |
self.inception4b = Inception_block(512, 160, 112, 224, 24, 64, 64) | |
self.inception4c = Inception_block(512, 128, 128, 256, 24, 64, 64) | |
self.inception4d = Inception_block(512, 112, 144, 288, 32, 64, 64) | |
self.inception4e = Inception_block(528, 256, 160, 320, 32, 128, 128) | |
self.maxpool4 = nn.MaxPool2d(kernel_size=3,stride=2, padding=1) | |
self.inception5a = Inception_block(832, 256, 160, 320, 32, 128, 128) | |
self.inception5b = Inception_block(832, 384, 192, 384, 48, 128, 128) | |
self.avgpool = nn.AvgPool2d(kernel_size=7,stride=1) | |
self.dropout = nn.Dropout(p=0.4) | |
self.fc1 = nn.Linear(1024, 1000) | |
if self.aux_logits: | |
self.aux1 = InceptionAux(512, num_classes) | |
self.aux2 = InceptionAux(528, num_classes) | |
else: | |
self.aux1 = self.aux2 = None | |
def forward(self, x): | |
x = self.conv1(x) | |
x = self.maxpool1(x) | |
x = self.conv2(x) | |
x = self.maxpool2(x) | |
x = self.inception3a(x) | |
x = self.inception3b(x) | |
x = self.maxpool3(x) | |
x = self.inception4a(x) | |
# Auxiliary Softmax classifier 1 | |
if self.aux_logits and self.training: | |
aux1 = self.aux1(x) | |
x = self.inception4b(x) | |
x = self.inception4c(x) | |
x = self.inception4d(x) | |
## Auxiliary Softmax classifier 2 | |
if self.aux_logits and self.training: | |
aux2 = self.aux2(x) | |
x = self.inception4e(x) | |
x = self.maxpool4(x) | |
x = self.inception5a(x) | |
x = self.inception5b(x) | |
x = self.avgpool(x) | |
x = x.reshape(x.shape[0], -1) | |
x = self.dropout(x) | |
x = self.fc1(x) | |
if self.aux_logits and self.training: | |
return aux1, aux2, x | |
else: | |
return x |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment