class DeepCNN(nn.Module): def __init__(self, num_classes=5): super(DeepCNN, self).__init__() self.cnn_layers = nn.Sequential( nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1), # Conv Layer 1 nn.ReLU(), nn.BatchNorm2d(32), nn.MaxPool2d(kernel_size=2, stride=2), # Downsampling nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1), # Conv Layer 2 nn.ReLU(), nn.BatchNorm2d(64), nn.MaxPool2d(kernel_size=2, stride=2), # Downsampling nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1), # Conv Layer 3 (new) nn.ReLU(), nn.BatchNorm2d(128), nn.MaxPool2d(kernel_size=2, stride=2), # Downsampling nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1), # Conv Layer 4 (new) nn.ReLU(), nn.BatchNorm2d(256), nn.MaxPool2d(kernel_size=2, stride=2), # Downsampling ) self.fc_layers = nn.Sequential( nn.Flatten(), nn.Linear(256 * 8 * 8, 512), # Fully connected layer nn.ReLU(), nn.Dropout(0.5), nn.Linear(512, num_classes) ) def forward(self, x): x = self.cnn_layers(x) x = self.fc_layers(x) return x