import torch import torch.nn as nn import torch.nn.functional as F from functools import reduce class NaiveModel(torch.nn.Module): def __init__(self): super().__init__() self.conv1 = torch.nn.Conv2d(1, 20, 5, 1) self.conv2 = torch.nn.Conv2d(20, 50, 5, 1) self.fc1 = torch.nn.Linear(4 * 4 * 50, 500) self.fc2 = torch.nn.Linear(500, 10) self.relu1 = torch.nn.ReLU6() self.relu2 = torch.nn.ReLU6() self.relu3 = torch.nn.ReLU6() self.max_pool1 = torch.nn.MaxPool2d(2, 2) self.max_pool2 = torch.nn.MaxPool2d(2, 2) def forward(self, x): x = self.relu1(self.conv1(x)) x = self.max_pool1(x) x = self.relu2(self.conv2(x)) x = self.max_pool2(x) x = x.view(-1, x.size()[1:].numel()) x = self.relu3(self.fc1(x)) x = self.fc2(x) return F.log_softmax(x, dim=1)