Pytorch - базовая структура cnn - PullRequest
0 голосов
/ 20 декабря 2018

Я только что начал pytorch сегодня, и сейчас читаю это.https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html. В документации есть этот код, а также приведенная иллюстрация.Это как-то связано?Например, это структура или архитектура сети данного кода?

import torch
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        # 1 input image channel, 6 output channels, 5x5 square convolution
        # kernel
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.conv2 = nn.Conv2d(6, 16, 5)
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        # Max pooling over a (2, 2) window
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        # If the size is a square you can only specify a single number
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  # all dimensions except the batch dimension
        num_features = 1
        for s in size:
            num_features *= s
        return num_features


net = Net()
print(net)

Ссылка на архитектуру CNN: https://imgur.com/83UmBGc

Ссылка на изображение здесь

1 Ответ

0 голосов
/ 22 декабря 2018

Да, сеть на изображении представлена ​​кодом.Здесь C1, C3, ... представляет собой сверточный слой, а S2, S4, ... максимальные слои пула.Показанные размеры соответствуют размерам изображения после прохождения каждого из этих слоев.Вы можете проверить это, используя следующую процедуру:

Размер входного изображения (1, 32, 32) соответствует (каналы, высота, ширина).После прохождения C1: Conv2d(1, 6, 5) размеры будут (6, 28, 28), что можно найти по формуле: output dim = (input_dim - filter_size + 2*padding)/stride + 1.Затем, пройдя через S2: max_pool2d, пространственный размер уменьшится вдвое, то есть размеры будут (6, 14, 14).Таким же образом вы можете проверить дополнительные размеры и доказать себе, что изображение соответствует коду.

Вы можете проверить CS231n справочник для расчета размеров изображения.

...