| | import numpy as np |
| | import torch.nn as nn |
| |
|
| |
|
| | |
| | class BasicClassificationModel(nn.Module): |
| | def __init__(self, image_size): |
| | super().__init__() |
| | self.image_size = image_size |
| |
|
| | |
| | self.first_convolutional_layer = nn.Conv2d(3, 16, 5, padding=0) |
| | self.second_convolutional_layer = nn.Conv2d(16, 32, 5, padding=0) |
| | self.third_convolutional_layer = nn.Conv2d(32, 64, 5, padding=0) |
| |
|
| | self.fully_connected_layer = self.create_dynamic_output_layer() |
| | |
| |
|
| | self.pooling_layer = nn.MaxPool2d(5) |
| | self.activation_layer = nn.LeakyReLU(0.01) |
| |
|
| | |
| | |
| | def create_dynamic_output_layer(self): |
| | output_image_size = self.image_size |
| |
|
| | for layer in range(2): |
| | output_image_size = ((output_image_size - 4) // 5) |
| | |
| |
|
| | output_image_size = output_image_size - 4 |
| | fully_connected_layer = nn.Linear(output_image_size * output_image_size * 64, 2) |
| | return fully_connected_layer |
| |
|
| | def forward(self, x): |
| | x = self.first_convolutional_layer(x) |
| | x = self.pooling_layer(x) |
| |
|
| | x = self.second_convolutional_layer(x) |
| | x = self.pooling_layer(x) |
| |
|
| | x = self.third_convolutional_layer(x) |
| | x = self.activation_layer(x) |
| |
|
| | x = x.view(x.size(0), -1) |
| | |
| |
|
| | class_predictions = self.fully_connected_layer(x) |
| |
|
| | return class_predictions |
| |
|
| |
|
| | classifierModel = BasicClassificationModel(image_size=416) |
| | print(classifierModel) |
| |
|