| import torch |
| import torch.nn as nn |
| import torch.optim as optim |
|
|
| class CNNModel(nn.Module): |
|
|
| def __init__(self): |
| super(CNNModel, self).__init__() |
| self.conv1 = nn.Conv2d(3, 64, kernel_size=5, padding=2) |
| self.relu1 = nn.ReLU() |
| self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2) |
| self.conv2 = nn.Conv2d(64, 128, kernel_size=5, padding=2) |
| self.relu2 = nn.ReLU() |
| self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2) |
| self.conv3 = nn.Conv2d(128, 256, kernel_size=3, padding=1) |
| self.relu3 = nn.ReLU() |
| self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2) |
| self.conv4 = nn.Conv2d(256, 384, kernel_size=5, padding=1) |
| self.relu4 = nn.ReLU() |
| self.conv5 = nn.Conv2d(384, 256, kernel_size=1, padding=0) |
| self.relu5 = nn.ReLU() |
| self.avgpool = nn.AdaptiveAvgPool2d((3, 3)) |
| self.flatten = nn.Flatten() |
| self.dropout1 = nn.Dropout(p=0.1) |
| self.fc1 = nn.Linear(256 * 3 * 3, 1024) |
| self.relu6 = nn.ReLU() |
| self.dropout2 = nn.Dropout(p=0.1) |
| self.fc2 = nn.Linear(1024, 512) |
| self.relu7 = nn.ReLU() |
| self.fc3 = nn.Linear(512, 200) |
| self.softmax = nn.Softmax(dim=1) |
|
|
| def forward(self, x): |
| x = self.pool1(self.relu1(self.conv1(x))) |
| x = self.pool2(self.relu2(self.conv2(x))) |
| x = self.pool3(self.relu3(self.conv3(x))) |
| x = self.relu4(self.conv4(x)) |
| x = self.relu5(self.conv5(x)) |
| x = self.avgpool(x) |
| x = self.flatten(x) |
| x = self.dropout1(x) |
| x = self.relu6(self.fc1(x)) |
| x = self.dropout2(x) |
| x = self.relu7(self.fc2(x)) |
| x = self.fc3(x) |
| x = self.softmax(x) |
| return x |
| |
| model = CNNModel() |
| loss_fn = nn.NLLLoss() |
| optimizer = optim.Adam(model.parameters(), lr=0.0003) |