LeNet 神经网络

1. LeNet 简介

  LeNet 原是 LeNet1 - LeNet5 这系列网络的合称,但现在所说的 LeNet 则一般特指 LeNet5 (后文统一称为 LeNet)。LeNet 是 Yann LeCun 教授于 1998 年在论文《Gradient-Based Learning Applied to Document Recognition》中提出的 ,设计之初只是用于手写数字的识别,到如今已成为卷积神经网络的 HelloWorld。受限于计算机的算力不足,加之支持向量机 (核学习方法) 的兴起,CNN 方法并未成为当时学术界认可的主流方法。

  算上输入层的话,LeNet 共有 8 层,包含 3 个卷积层,2 个池化层 (下采样层) 和 1 个全连接层。其中,所有卷积操作的核都固定为 5x5,步长为 1;统一使用全局平均池化。LeNet 的网络结构如下

  • 输入层:输入图像的尺寸为 32X32;
  • C1 层 (卷积层):使用 6 个核大小为 5×5 的卷积,得到 6 张 28×28 的特征图;
  • S2 层 (池化层,即下采样层):使用 6 个 2×2 的平均池化,得到 6 张 14×14 的特征图;
  • C3 层 (卷积层):使用 16 个核大小为 5×5 的卷积,得到 16 张 10×10 的特征图;
  • S4 层 (池化层):使用 16 个 2×2 的平均池化,得到 16 张 5×5 的特征图;
  • C5 层 (卷积层):使用 120 个核大小为 5×5 的卷积,得到 120 张 1×1 的特征图 (一个向量);
  • F6 层 (全连接层):含 84 个节点的全连接层,对应于一个 7x12 的比特图;
  • 输出层:含 10 个节点的全连接层,分别代表数字 0 到 9。

2. LeNet 的 PyTorch 实现

# _*_coding:utf-8_*_
import torch
import torch.nn as nn
import torch.nn.functional as F


class LeNet5(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(LeNet5, self).__init__()

        # 卷积神经网络
        self.features = nn.Sequential(
            nn.Conv2d(in_channels, 6, kernel_size=5),
            nn.MaxPool2d(kernel_size=2),
            nn.Conv2d(6, 16, kernel_size=5),
            nn.MaxPool2d(kernel_size=2)  # 原模型使用的是平均池化
        )
        # 分类器
        self.classifier = nn.Sequential(
            nn.Linear(16 * 5 * 5, 120 * 1 * 1),  # 这里将第三个卷积层看成是全连接层
            nn.Linear(120, 84),
            nn.Linear(84, out_channels)
        )

    def forward(self, x):
        x = self.features(x)
        x = torch.flatten(x, 1)  # 铺平tensor
        x = self.classifier(x)
        out = F.softmax(x, 1)  # 激活函数

        return out


if __name__ == "__main__":
    batch_size = 1
    in_channels = 1
    out_channels = 10
    inputs = torch.rand((batch_size, in_channels, 32, 32))  # (B, C, H, W)
    lenet = LeNet5(in_channels, out_channels)
    outputs = lenet(inputs)
    print(outputs)
    print(outputs.sum())
    print(outputs.max())
    print(torch.argmax(outputs, 1))

【参考】

  1. 卷积神经网络之Lenet
  2. CNN发展简史——LeNet(一)
  3. pytorch LeNet 模型
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,主要用于图像识别和计算机视觉任务。它通过卷积层、池化层和全连接层等组件来提取图像的特征,并进行分类或回归等任务。 CNN的基本原理是通过卷积操作来提取图像的局部特征,然后通过池化操作来减小特征图的尺寸和参数数量。卷积层使用一组可学习的滤波器(也称为卷积核)对输入图像进行卷积操作,从而得到一系列特征图。池化层则通过对特征图进行降采样,保留主要特征并减少计算量。最后,通过全连接层将提取到的特征映射到输出类别。 CNN的优势在于它能够自动学习图像的特征表示,而无需手动设计特征。此外,CNN还具有平移不变性和局部连接性等特点,使其在处理图像数据时表现出色。 范例:<<引用:一般的卷积神经网络,输入图像x,输出卷积后的特征F(x),一次性抽出所有的信息,梯度消失会出现,Res网络就说只学习残差即可。 [^1]。引用:VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠33的小型卷积核和22的最大池化层,VGGNet成功地构筑了16~19层深的卷积神经网络。VGGNet相比之前state-of-the-art的网络结构,错误率大幅下降,并取得了ILSVRC 2014比赛分类项目的第2名和定位项目的第1名。 。引用:CNN的基本原理是通过卷积操作来提取图像的局部特征,然后通过池化操作来减小特征图的尺寸和参数数量。卷积层使用一组可学习的滤波器(也称为卷积核)对输入图像进行卷积操作,从而得到一系列特征图。池化层则通过对特征图进行降采样,保留主要特征并减少计算量。最后,通过全连接层将提取到的特征映射到输出类别。[^3]。 CNN是一种深度学习模型,主要用于图像识别和计算机视觉任务[^3]。它通过卷积层、池化层和全连接层等组件来提取图像的特征,并进行分类或回归等任务[^3]。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值