Files
PyTorchCource/custom_arhitecture/alexnet.py
T

54 lines
1.5 KiB
Python

import torch
import torch.nn as nn
class AlexNetCustom(nn.Module):
def __init__(self,
in_channels: int = 3,
out_classes: int=1_000):
super().__init__()
self._out_classes = out_classes
self.feature = nn.Sequential(
nn.Conv2d(in_channels, 96, kernel_size=11, stride=4, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Conv2d(96, 256, kernel_size=5, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Conv2d(256, 384, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 384, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 256, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2)
)
self.avgpool = nn.AdaptiveAvgPool2d((6, 6))
self.mlp = nn.Sequential(
nn.Dropout(p=0.5),
nn.Linear(256*6*6, 4096),
nn.ReLU(inplace=True),
nn.Dropout(p=0.5),
nn.Linear(4096, 4096),
nn.ReLU(inplace=True),
nn.Linear(4096, self._out_classes)
)
def forward(self, image):
x = self.feature(image)
x = self.avgpool(x)
x = torch.flatten(x, 1)
x = self.mlp(x)
return x