ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeNet5论文解读

2020-02-29 13:40:12  阅读:316  来源: 互联网

标签:LeNet5 nn 卷积 self 论文 times 解读 shape size


传统的模式识别方法如下图所示,通常包含2个部分,第一部分为特征提取模块,第二部分为分类模块。特征提取模块通常会提取一些基本的特征,与任务是无关的,此模块通常为人工设计的。分类模块通常是针对任务的并且是可训练的。传统的方法很大程度上依赖人工设计的特征提取模块能否提取到有效的特征,并且对于不同的任务需要重新设计。

在这里插入图片描述

相比较之前的优点

第一、卷积相比较FC所需要的参数少。
第二、FC丢失了空间信息,而卷积操作可以很好的保留。

网络结构

在这里插入图片描述
LeNet5网络包含两层卷积层和三层全连接层。
输入为32×3232 \times 3232×32的图片。
输入图像的shape:1×32×321 \times 32 \times 321×32×32

1、卷积层C1

kenel size: 5×55 \times 55×5
#kernel:6
经过卷积之后的shape:6×28×286 \times 28 \times 286×28×28
#parameters:6*(551+1) = 156 (包含bias)

2、下采样层S2(平均池化层)

kenel size: 2×22 \times 22×2
经过下采样之后的shape:6×14×146 \times 14 \times 146×14×14
现在的实现常用最大池化。
在这里插入图片描述

3、卷积层C3

kenel size: 5×55 \times 55×5
#kernel:16
经过卷积之后的shape:16×10×1016 \times 10 \times 1016×10×10
论文中提到的是前6个feature map 与S2中的3个相邻的feature map相连,接下来的6个feature map与S2中的4个相邻的feature map相连,再接下来的3个feature map与S2
中的4个不相邻的feature map相连,最后一个feature map与S2中所有的feature map相连。
#parameters:6*(553+1) + 6*(554+1) + 3*(554+1) + 1*(556+1) = 1516

4、下采样层S4(平均池化层)

kenel size: 2×22 \times 22×2
经过下采样之后的shape:16×5×516 \times 5 \times 516×5×5
现在的实现常用最大池化。

5、卷积层C5

kenel size: 5×55 \times 55×5
#kernel:120
经过卷积之后的shape:120×1×1120 \times 1 \times 1120×1×1
#parameters:120*(5516+1) = 48120

6、全连接层F6

F6相当于MLP(Multi-Layer Perceptron,多层感知机)中的隐含层,有84个节点,所以有84∗(120+1)=10164 个参数,F6采用了sigmoid函数,不过现在实现通常用ReLU函数。

7、输出层

全连接层,共有10个节点,采用的是径向基函数(RBF)的网络连接方式。

代码

import torch
from torch import nn

class LeNet5(nn.Module):
    def __init__(self):
        super(LeNet5, self).__init__()
        self.conv1 = nn.Sequential(
            nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, padding=2),
            # nn.BatchNorm2d(6),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2)
        )
        self.conv2 = nn.Sequential(
            nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5),
            # nn.BatchNorm2d(16),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2)
        )
        self.fc = nn.Sequential(
            nn.Linear(16 * 5 * 5, 120),
            nn.Linear(120, 84),
            nn.Linear(84, 10)
        )

    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        x = x.view(x.shape[0], -1)
        x = self.fc(x)
        return x

if __name__ == '__main__':
    x = torch.rand(8,1,28,28)
    net = LeNet5()
    y = net(x)
    print(y.shape)
    print(y)

Reference

1.LeNet5的论文及理解

csCaiRujia 发布了89 篇原创文章 · 获赞 0 · 访问量 2万+ 私信 关注

标签:LeNet5,nn,卷积,self,论文,times,解读,shape,size
来源: https://blog.csdn.net/Dream_xd/article/details/104563874

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有