卷积神经网络模型之——LeNet网络结构与代码实现

LeNet简介

LeNet原文地址:https://ieeexplore.ieee.org/abstract/document/726791

在这里插入图片描述
LeNet可以说是卷积神经网络的“HelloWorld”,它通过巧妙的设计,利用卷积、池化等操作提取特征,再使用全连接神经网络进行分类。

Lenet是一个 7 层的神经网络(不包含输入层),包含 3 个卷积层,2 个池化层,2 个全连接层。它的网络结构图如下所示:
在这里插入图片描述

LeNet7层结构

第0层:输入
输入的原始图像大小是32×32像素的3通道图像。

C1:第一个卷积层

C1是一个卷积层,卷积核大小为5,输入大小为3X32X32,输出特征图大小为16X28X28

self.conv1 = nn.Conv2d(3, 16, 5)

torch.nn.Conv2d()的参数解释如下:

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
  • in_channels (int) – Number of channels in the input image
  • out_channels (int) – Number of channels produced by the convolution
  • kernel_size (int or tuple) – Size of the convolving kernel
  • stride (int or tuple, optional) – Stride of the convolution. Default: 1
  • padding (int, tuple or str, optional) – Padding added to all four sides of the input. Default: 0
  • padding_mode (string, optional) – ‘zeros’, ‘reflect’, ‘replicate’ or ‘circular’. Default: ‘zeros’
  • dilation (int or tuple, optional) – Spacing between kernel elements. Default: 1
  • groups (int, optional) – Number of blocked connections from input channels to output channels. Default: 1
  • bias (bool, optional) – If True, adds a learnable bias to the output. Default: True

经过卷积后的输出大小计算为下:
在这里插入图片描述

S2:第一个下采样层

S2是一个池化层,kernel_size为2,stride为2,输入大小为16X28X28,输出特征图大小为16X14X14

self.pool1 = nn.MaxPool2d(2, 2)

torch.nn.MaxPool2d的参数解释如下:

torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
  • kernel_size – the size of the window to take a max over
  • stride – the stride of the window. Default value is kernel_size
  • padding – implicit zero padding to be added on both sides
  • dilation – a parameter that controls the stride of elements in the window
  • return_indices – if True, will return the max indices along with the outputs. Useful for torch.nn.MaxUnpool2d later
  • ceil_mode – when True, will use ceil instead of floor to compute the output shape

经过池化后的输出大小计算为下:
在这里插入图片描述

C3:第2个卷积层

C3是一个卷积层,卷积核大小为5,输入大小为16X14X14,输出特征图大小为32X10X10

self.conv2 = nn.Conv2d(16, 32, 5)

S4:第2个下采样层

S4是一个池化层,kernel_size为2,stride为2,输入大小为32X10X10,输出特征图大小为32X5X5

self.pool2 = nn.MaxPool2d(2, 2)

C5:第3个卷积层

C5是一个卷积层,卷积核大小为5,输入大小为32X5X5,输出特征图大小为120X1X1

此处用全连接层代替

self.fc1 = nn.Linear(32*5*5, 120)

F6:第1个全连接层

F6是一个全连接层,输入大小为120,输出特征图大小为84

self.fc2 = nn.Linear(120, 84)

F7:第2个全连接层

F7是一个全连接层,输入大小为84,输出特征图大小为10(表示有10种类别)。

self.fc3 = nn.Linear(84, 10)

使用pytorch搭建LeNet

搭建一个网络模型,最少需要分两步进行

1. 创建一个类并继承nn.Module

import torch.nn as nn

# pytorch:通道排序:[N,Channel,Height,Width]
class LeNet(nn.Module):

2. 类中实现两个方法

def __init__(self):定义搭建网络中需要使用的网络层结构

def forward(self, x): 定义正向传播过程

LeNet网络结构pytorch实现:

class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 5)    # C1
        self.pool1 = nn.MaxPool2d(2, 2)     # S2
        self.conv2 = nn.Conv2d(16, 32, 5)   # C3
        self.pool2 = nn.MaxPool2d(2, 2)     # S4
        self.fc1 = nn.Linear(32*5*5, 120)   # C5(用全连接代替)
        self.fc2 = nn.Linear(120, 84)       # F6
        self.fc3 = nn.Linear(84, 10)        # F7

    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)
        x = F.relu(self.conv2(x))    # output(32, 10, 10)
        x = self.pool2(x)            # output(32, 5, 5)
        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

打印LeNet结构如下:

model = LeNet()
print(model)

在这里插入图片描述

### 回答1: LeNet网络结构是Yann LeCun等人在1998年提出的一种经典的神经网络结构,用于手写数字识别。该网络结构包括卷积层、池化层和全连接层等组件。 您可以在网上搜索"LeNet网络结构visio下载"来下载相关的网络结构图。许多论文和学术资源网站提供了LeNet的详细介绍和网络结构图的下载链接。您可以在这些网站上找到高清版本的visio图,用于更好地理解和学习LeNet网络结构。 另外,您也可以使用在线绘图工具如Edraw Max等制作LeNet网络结构图。这些工具提供了丰富的图形库和模板,可以帮助您轻松创建网络结构图,并且可以导出为visio格式。 总之,您可以通过在网上搜索或使用在线绘图工具来下载和生成LeNet网络结构图的visio版本。这将有助于您更好地了解和研究LeNet神经网络的结构。 ### 回答2: LeNet是一种经典的卷积神经网络结构,发表于1998年。它是第一个成功应用于手写数字识别的神经网络模型LeNet网络结构提出的时间很早,但至今仍然具有一定的参考价值。 然而,由于LeNet发表的时间较早,网络结构的详细信息在一些下载中很难获得。因此,无法给出LeNet网络结构可直接下载的visio文件。如果您想了解LeNet网络结构,可以通过阅读相关的论文和文献来获得详细的信息。 总的来说,LeNet网络结构是一个由卷积层、池化层和全连接层构成的深度学习模型。它主要用于图像分类任务,并在手写数字识别上取得了良好的成绩。LeNet的核心思想是通过卷积和池化操作对输入图像进行特征提取,并通过全连接层进行分类。 LeNet网络结构总共包含7层,其中包括2个卷积层、2个池化层和3个全连接层。每个卷积层后面跟着一个sigmoid激活函数来引入非线性。最后一个全连接层使用softmax函数来实现多分类任务。 虽然无法直接提供LeNet网络结构的visio下载,但通过互联网和社交媒体,您可以找到很多关于LeNet网络结构图。通过查找和参考这些图表,您可以更好地了解LeNet网络结构,并在自己的项目中应用。
评论 66
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1 + 1=王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值