LeNet-5网络结构详解

一.LetNet结构

 LeNet-5网络结构详解_第1张图片

LeNet模块主要有3个模块组成,前2个是卷积模块,后1个是全连接模块,卷积模块中只要模块是卷积层与池化层。

卷积层中都使用5X5的卷积核,并使用sigmoid的激活函数,第一层卷积输出通道为6,第二层卷积 输出通道是16,在每一层卷积中的池化层选择最大池化层,最大池化层选取2X2的窗口,并且步长为2,由于池化窗口与步伐相同,所以不重叠,C5中输出为120*1*1。

全连接层F6中,输入向量维度:[1,120]权重参数的维度:[120,84]得到一个输出维度[1.86]的一维向量,最后经过output层输出维度[1,10],10为输出的类别个数。

二.LeNet主要贡献

LeNet是第一次将卷积神经网络应用于实际操作中,是通过梯度下降训练卷积神经网络的鼻祖算法之一;

LeNet奠定了卷积神经网络的基本结构,即卷积、非线性激活函数、池化、全连接;

使用局部感受野,权值共享,池化(下采样)来实现图像的平移,缩放和形变的不变性,其中卷积层用来识别图像里的空间模式,如线条和物体局部特征,最大池化层则用来降低卷积层对位置的敏感性;

三.pytorch程序实现

import torch
import torch.nn.functional as F  # 激活函数
class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 定义了我们第一个要用到的卷积层,因为图片输入通道为1,第一个参数就是1
        # 输出的通道为10,kernel_size是卷积核的大小,这里定义的是5x5的
        self.conv1 = torch.nn.Conv2d(1, 6, kernel_size=5)
        # 看懂了上面的定义,下面这个你肯定也能看懂
        self.conv2 = torch.nn.Conv2d(6, 16, kernel_size=5)
        # 再定义一个池化层
        self.pooling = torch.nn.MaxPool2d(2)
        # 最后是我们做分类用的全连接层
        self.fc1 = torch.nn.Linear(120, 84)
        self.fc2 = torch.nn.Linear(84, 10)

    # 下面就是计算的过程
    def forward(self, x):
        # Flatten data from (n, 1, 28, 28) to (n, 784)
        batch_size = x.size(0)  # 这里面的0是x大小第1个参数,自动获取batch大小
        # 输入x经过一个卷积层,之后经历一个池化层,最后用relu做激活
        x = F.relu(self.pooling(self.conv1(x)))
        # 再经历上面的过程
        x = F.relu(self.pooling(self.conv2(x)))
        # 为了给我们最后一个全连接的线性层用
        # 我们要把一个二维的图片(实际上这里已经是处理过的)20x4x4张量变成一维的
        x = x.view(batch_size, -1)  # flatten
        # 经过线性层,确定他是0~9每一个数的概率
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

你可能感兴趣的:(图像分类经典论文,pytorch,深度学习,神经网络)