零基础学Pytorch01_模型的定义(LetNet)

图像分类任务01_模型的定义(LetNet)

网络模型的定义
LetNet.py


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


class LetNet(nn.Module):
    def __init__(self):    # 初始化函数
        super(LetNet, self).__init__() # 涉及到多继承一般会使用super函数
        """
        卷积层的计算公式
        N = (W - F + 2P) / S + 1
        1.输入的图片大小为 w*w
        2.Filter大小F*F
        3.步长S
        4.padding的像素数p
        """
        # 第一个参数代表输入特征矩阵的参数 第二个函数是输入卷积层的个数 第三个参数代表卷积层的大小
        self.conv1 = nn.Conv2d(3, 16, 5)
        # 第一个参数是池化和的大小 第二个参数为步距
        self.pool1 = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(16, 32, 5)
        self.pool2 = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(32*5*5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10) #最后是十个类别

    def forward(self, x):            # 定义正向传播
        x = F.relu(self.conv1(x))    # input(3, 32, 32) output(16, 28, 28)
        x = self.pool1(x)            # output(16, 14, 14)
        # relu为激活函数
        x = F.relu(self.conv2(x))    # output(32, 10, 10)
        x = self.pool2(x)            # output(32, 5, 5)
        # view函数的作用是吧特征矩阵展开为一维向量形式
        # 这里的-1不是一个有意义的数,在这“暂时占位”,可以把它理解为未知数x,他会根据第二个维度反推这个x
        x = x.view(-1, 32*5*5)       # output(32*5*5)
        x = F.relu(self.fc1(x))      # output(120)
        x = F.relu(self.fc2(x))      # output(84)
        x = self.fc3(x)              # output(10)
        return x


你可能感兴趣的:(图像分类,pytorch,深度学习,python)