pytorch-CNN的基本结构

时间:2018-12-20 18:45:05

标签: python neural-network conv-neural-network pytorch

我今天刚开始使用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

Link of the image here

1 个答案:

答案 0 :(得分:0)

是的,图像中的网络由代码表示。在此,C1,C3,...表示卷积层,S2,S4,... max池层。所示的尺寸是穿过这些层中的每一层后的图像尺寸。您可以使用以下过程进行检查:

图像的输入尺寸是(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 reference以计算图像尺寸。