[LeNet]数据流各层维度细节解析

一、LeNet简介

LeNet是一个经典的卷积神经网络结构,包含卷积层、池化层和全连接层。以下是LeNet中每一层的工作和数据维度变化的详细解释:

LeNet中的数据流。输入是手写数字,输出为10种可能结果的概率。

图源自 LeNet

二、数据集介绍

假设我们用MNIST数据集, MNIST数据集包含了一系列28x28像素的灰度图像。每个图像代表一个手写的数字,位于0到9之间。这些图像是单通道(灰度)的,每个像素的灰度级别在0到255之间。 每张图像都有一个与之关联的标签,表示图像中的数字。标签是整数,范围从0到9。

三、计算公式

(一)卷积层

计算通过卷积层后的维度可以使用以下公式来确定:

输出维度 = [(输入维度 - 卷积核尺寸 + 2 * 填充) / 步幅] + 1

其中:

  • 输入维度:输入特征图的高度或宽度。
  • 卷积核尺寸:卷积核的高度或宽度。
  • 填充:可选的填充操作,通常为0。
  • 步幅:卷积操作中的滑动步幅。

举例说明:

假设有一个输入特征图的维度为 7x7(高度为7,宽度为7),卷积核的尺寸为3x3,填充为1,步幅为2。我们来计算卷积后的输出维度。

使用公式:

输出维度 = [(输入维度 - 卷积核尺寸 + 2 * 填充) / 步幅] + 1

将值代入:

输出维度 = [(7 - 3 + 2 * 1) / 2] + 1 输出维度 = [(7 - 3 + 2) / 2] + 1 输出维度 = (6 / 2) + 1 输出维度 = 3 + 1 输出维度 = 4

因此,通过这个卷积层后的维度为4x4。这意味着输入特征图的尺寸在卷积操作后缩小为4x4。这个新的特征图将成为下一层的输入。这个过程在卷积神经网络中用于逐渐提取图像的特征。

(二)池化层

池化层的输出维度通常取决于输入维度、池化窗口大小和步幅(stride)。一般来说,输出维度可以通过以下公式计算:

输出维度 = ((输入维度 - 池化窗口大小) / 步幅) + 1

其中,"输入维度"指的是池化层的输入的维度,通常是特征图的高度或宽度。"池化窗口大小"是池化操作使用的窗口的高度或宽度。"步幅"表示窗口每次在输入上滑动的像素数。

例如,如果输入维度为16x16,池化窗口大小为2x2,步幅为2,那么输出维度将是:

输出维度 = ((16 - 2) / 2) + 1 = 8

所以,池化层的输出维度通常不等于输入维度除以步幅。它取决于输入维度、池化窗口大小和步幅的组合。在LeNet中,第一个池化层的输入维度是24x24,池化窗口大小是2x2,步幅是2,因此输出维度是12x12。同样,第二个池化层的输出维度是8x8,如我在前面的解释中所示。

四、逐层解析每层数据维度

LeNet模型的输入维度:[Batch Size, 1, 28, 28],其中Batch Size, 是批处理大小,1 表示单通道灰度图像,28x28 是图像的高度和宽度。

  1. 第一个卷积层 conv1

    • 卷积核数量:6
    • 卷积核大小:5x5
    • 步幅(stride):1
    • 填充(padding):0(假设没有填充)
    • 卷积操作后的输出维度:[Batch Size, 6, 24, 24],6是由于卷积核数量,24是(28-5)/1+1
    • 每个卷积核在输入图像上滑动,计算特征图。这一层的目标是检测图像的低级特征,如边缘和纹理。
  2. 第一个池化层 pool1

    • 池化核大小:2x2
    • 步幅:2
    • 池化操作后的输出维度:[Batch Size, 6, 12, 12],12=(24-2)/2+1
    • 池化层通过降采样操作将特征图的尺寸减半,同时保留主要特征。
  3. 第二个卷积层 conv2

    • 卷积核数量:16
    • 卷积核大小:5x5
    • 步幅:1
    • 填充:0(假设没有填充)
    • 卷积操作后的输出维度:[Batch Size, 16, 8, 8]
    • 这一层继续检测更高级的特征,如形状和纹理的组合。
  4. 第二个池化层 pool2

    • 池化核大小:2x2
    • 步幅:2
    • 池化操作后的输出维度:[Batch Size, 16, 4, 4]
    • 与第一个池化层类似,此池化层继续降低特征图的尺寸,同时保留关键特征。
  5. )展平层(Flatten):

    • 数据维度变为 [Batch Size, 256],通过将池化层的输出展平为一维向量,以便输入到全连接层。
  6. 全连接层1 (Fully Connected Layer 1):

    • 输入维度: 全连接层1接收Flatten层的输出,维度为 [Batch Size, 256]。
    • 输出维度: 通常包括120个神经元,因此输出维度为 [Batch Size, 120]。
  7. 全连接层2 (Fully Connected Layer 2):

    • 输入维度: 全连接层2接收全连接层1的输出,维度为 [Batch Size, 120]。
    • 输出维度: 通常包括84个神经元,因此输出维度为 [Batch Size, 84]。
  8. 全连接层3 (Fully Connected Layer 3,输出层):

    • 输入维度: 全连接层3接收全连接层2的输出,维度为 [Batch Size, 84]。
    • 输出维度: 输出维度根据任务需求而定,通常是类别的数量,例如10(对于手写数字识别),因此输出维度为 [Batch Size, 10].

这些是LeNet每一层的数据维度和所做的工作。LeNet通过卷积层和池化层提取特征,然后通过全连接层实现分类。它的结构为卷积-池化-卷积-池化-全连接-全连接-全连接,,每一层的主要工作是从输入数据中提取特征,并将特征传递到下一层。卷积层和池化层用于逐渐提取抽象特征,全连接层用于分类。整个LeNet结构在训练中通过反向传播学习适当的权重,以进行图像分类任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值