【图像分类】一文带你玩转LeNet(pytorch)

简介: 【图像分类】一文带你玩转LeNet(pytorch)

目录


摘要


1、 模型结构


各层参数详解:


1、输入层-INPUT


2、C1层-卷积层


3、S2层-池化层(下采样层)


4、C3层-卷积层


5、S4层-池化层(下采样层)


6、C5层-卷积层


7、F6层-全连接层


8、Output层-全连接层


各层参数总结


2、模型特性


代码复现:


摘要

LeNet-5是由LeCun在1994年提出的一种用于识别手写数字和机器印刷字符的卷积神经网络(Convolutional Neural Network,CNN),是卷积神经网络的开山之作,其命名来源于作者LeCun的名字,5则是其研究成果的代号,是LeNet的第五个版本。LeNet-5阐述了图像中像素特征之间的相关性能够由参数共享的卷积操作所提取,同时使用卷积、下采样(池化)和非线性映射这样的组合结构,是当前流行的大多数深度图像识别网络的基础。


1、 模型结构

tt.png



如上图所示,LeNet-5一共包含7层(输入层不作为网络结构),分别由2个卷积层、2个下采样层和3个连接层组成。


各层参数详解:

1、输入层-INPUT

首先是数据 INPUT 层,输入图像的尺寸统一ReSize为32*32。


注意:本层不算LeNet-5的网络结构,传统上,不将输入层视为网络层次结构之一。


2、C1层-卷积层

卷积层的计算公式参考这篇文章:CNN基础——卷积神经网络的组成_AI浩-CSDN博客


输入图片:32×32


卷积核大小:5×5


卷积核种类:6


输出featuremap大小:28×28 (32-5+1)=28


神经元数量:28×28×6


可训练参数:(5×5+1) × 6(每个滤波器5×5=25个unit参数和一个bias参数,一共6个滤波器)


连接数:(5×5+1)×6×28×28=122304


详细说明:对输入图像进行第一次卷积运算(使用 6 个大小为 5×5 的卷积核),得到6个C1特征图(6个大小为28×28的 feature maps, 32-5+1=28)。我们再来看看需要多少个参数,卷积核的大小为5×5,总共就有6×(5×5+1)=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的5×5个像素和1个bias有连接,所以总共有156×28×28=122304个连接(connection)。有122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。


3、S2层-池化层(下采样层)

输入:28×28


采样区域:2×2


采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid


采样种类:6


输出featureMap大小:14×14(28/2)


神经元数量:14×14×6


连接数:(2×2+1)×6×14×14


S2中每个特征图的大小是C1中特征图大小的1/4。


详细说明:第一次卷积之后紧接着就是池化运算,使用 2×2核 进行池化,于是得到了S2,6个14×14的 特征图(28/2=14)。S2这个pooling层是对C1中的2×2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。同时有5x14x14x6=5880个连接。


4、C3层-卷积层

输入:S2中所有6个或者几个特征map组合


卷积核大小:5×5


卷积核种类:16


输出featureMap大小:10×10 (14-5+1)=10


C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合


存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。


则:可训练参数:6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516


连接数:10×10×1516=151600


详细说明:第一次池化之后是第二次卷积,第二次卷积的输出是C3,16个10x10的特征图,卷积核大小是 5×5. 我们知道S2 有6个 14×14 的特征图,怎么从6 个特征图得到 16个特征图了? 这里是通过对S2 的特征图特殊组合计算得到的16个特征图。具体如下:

tt.png




C3的前6个feature map(对应上图第一个红框的6列)与S2层相连的3个feature map相连接(上图第一个红框),后面6个feature map与S2层相连的4个feature map相连接(上图第二个红框),后面3个feature map与S2层部分不相连的4个feature map相连接,最后一个与S2层的所有feature map相连。卷积核大小依然为5×5,所以总共有6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516个参数。而图像大小为10×10,所以共有151600个连接。

tt.png




C3与S2中前3个图相连的卷积结构如下图所示:


tt.png



上图对应的参数为 3×5×5+1,一共进行6次卷积得到6个特征图,所以有6×(3×5×5+1)参数。 为什么采用上述这样的组合了?论文中说有两个原因:1)减少参数,2)这种不对称的组合连接的方式有利于提取多种组合特征。


5、S4层-池化层(下采样层)

输入:10×10


采样区域:2×2


采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid


采样种类:16


输出featureMap大小:5×5(10/2)


神经元数量:5×5×16=400


连接数:16×(2×2+1)×5×5=2000


S4中每个特征图的大小是C3中特征图大小的1/4


详细说明:S4是pooling层,窗口大小仍然是2×2,共计16个feature map,C3层的16个10x10的图分别进行以2x2为单位的池化得到16个5x5的特征图。有5x5x5x16=2000个连接。连接的方式与S2层类似。


6、C5层-卷积层

输入:S4层的全部16个单元特征map(与s4全相连)


卷积核大小:5×5


卷积核种类:120


输出featureMap大小:1×1(5-5+1)


可训练参数/连接:120×(16×5×5+1)=48120


详细说明:C5层是一个卷积层。由于S4层的16个图的大小为5x5,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有(5x5x16+1)x120 = 48120个参数,同样有48120个连接。C5层的网络结构如下:

tt.png




7、F6层-全连接层

输入:c5 120维向量


计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。


可训练参数:84×(120+1)=10164


详细说明:6层是全连接层。F6层有84个节点,对应于一个7x12的比特图,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。该层的训练参数和连接数是(120 + 1)x84=10164。F6层的连接方式如下:

tt.png




8、Output层-全连接层

Output层也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:

tt.png




上式w_ij 的值由i的比特图编码确定,i从0到9,j取值从0到7*12-1。RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i。该层有84x10=840个参数和连接。

tt.png




上图是LeNet-5识别数字3的过程。


各层参数总结

网络层 输入尺寸 核尺寸 输出尺寸 可训练参数量

卷积层C_1 32×32×1 5×5×1/1,6 28×28×6 (5×5×1+1)×6

下采样层S_2 28×28×6 2×2/2 14×14×6 (1+1)×6

卷积层C_3 14×14×6 5×5×6/1,16 10×10×16 1516

下采样层S_4 10×10×16 2×2/2 5×5×16 (1+1)×16

卷积层C_5 5×5×16 5×5×16/1,120 1×1×120 (5×5×16+1)×120

全连接层F6 1×1×120 120×84 1×1×84 (120+1)×84

输出层 1×1×84 84×10 1×1×10 (84+1)×10

2、模型特性

卷积网络使用一个3层的序列组合:卷积、下采样(池化)、非线性映射(LeNet-5最重要的特性,奠定了目前深层卷积网络的基础)

使用卷积提取空间特征

使用映射的空间均值进行下采样

使用tanh或sigmoid最终的分类器

层间的稀疏连接矩阵以避免巨大的计算开销

代码复现:

import torch

from torch import nn

from torch.nn import functional as F

from torchsummary import summary

# 输入大小为32x32

class LeNet(nn.Module):

   def __init__(self):

       super(LeNet, self).__init__()

       self.conv1 = nn.Conv2d(1, 6, 5)

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

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

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

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

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

   def forward(self, x):

       x = self.pool(F.relu(self.conv1(x)))

       x = self.pool(F.relu(self.conv2(x)))

       x = x.view(x.size()[0], -1)

       x = F.relu(self.fc1(x))

       x = F.relu(self.fc2(x))

       x = self.fc3(x)

       return x

if __name__ == '__main__':

   device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

   model = LeNet()

   model.to(device)

   summary(model, (1, 32, 32))

tt.png


目录
相关文章
|
6月前
|
机器学习/深度学习 算法 PyTorch
用PyTorch轻松实现二分类:逻辑回归入门
用PyTorch轻松实现二分类:逻辑回归入门
用PyTorch轻松实现二分类:逻辑回归入门
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch使用VGG16模型进行预测猫狗二分类
深度学习已经在计算机视觉领域取得了巨大的成功,特别是在图像分类任务中。VGG16是深度学习中经典的卷积神经网络(Convolutional Neural Network,CNN)之一,由牛津大学的Karen Simonyan和Andrew Zisserman在2014年提出。VGG16网络以其深度和简洁性而闻名,是图像分类中的重要里程碑。
374 0
|
6月前
|
机器学习/深度学习 数据采集 PyTorch
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】使用Cifar10数据集训练LeNet5网络并实现图像分类(附代码)
【PyTorch实战演练】使用Cifar10数据集训练LeNet5网络并实现图像分类(附代码)
437 0
|
5月前
|
机器学习/深度学习 自然语言处理 算法
【从零开始学习深度学习】49.Pytorch_NLP项目实战:文本情感分类---使用循环神经网络RNN
【从零开始学习深度学习】49.Pytorch_NLP项目实战:文本情感分类---使用循环神经网络RNN
|
5月前
|
机器学习/深度学习 人工智能 PyTorch
PyTorch 图像篇
计算机视觉是多学科交叉的科技,属人工智能关键分支,应用于智能安防、自动驾驶、医疗和制造。技术包括物体检测、语义分割、运动跟踪等。早期依赖手工特征,但深度学习尤其是卷积神经网络(CNN)的发展改变了这一状况,CNN通过自动学习特征,改善了图像分类效率。CNN包含卷积层、池化层和全连接层,解决传统方法参数多、易丢失空间信息的问题。卷积操作在图像处理中用于特征提取,通过二维互相关运算学习图像特征。
|
6月前
|
机器学习/深度学习 JSON PyTorch
图神经网络入门示例:使用PyTorch Geometric 进行节点分类
本文介绍了如何使用PyTorch处理同构图数据进行节点分类。首先,数据集来自Facebook Large Page-Page Network,包含22,470个页面,分为四类,具有不同大小的特征向量。为训练神经网络,需创建PyTorch Data对象,涉及读取CSV和JSON文件,处理不一致的特征向量大小并进行归一化。接着,加载边数据以构建图。通过`Data`对象创建同构图,之后数据被分为70%训练集和30%测试集。训练了两种模型:MLP和GCN。GCN在测试集上实现了80%的准确率,优于MLP的46%,展示了利用图信息的优势。
96 1
|
4月前
|
机器学习/深度学习 PyTorch TensorFlow
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
|
4月前
|
PyTorch 算法框架/工具 索引
pytorch实现水果2分类(蓝莓,苹果)
pytorch实现水果2分类(蓝莓,苹果)
|
5月前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】50.Pytorch_NLP项目实战:卷积神经网络textCNN在文本情感分类的运用
【从零开始学习深度学习】50.Pytorch_NLP项目实战:卷积神经网络textCNN在文本情感分类的运用

相关实验场景

更多
下一篇
无影云桌面