LeNet

前言

2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共同特点是层次更深了。VGG继承了LeNet以及AlexNet的一些框架结构,而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,GoogleNet是比较好的选择;从模型结果来看,GoogLeNet的性能却更加优越。

LeNet

LeNet 是一种经典的卷积神经网络(CNN),由 Yann LeCun 等人在 1990 年代初提出,主要用于手写数字识别任务(如 MNIST 数据集)。LeNet 是最早的卷积神经网络之一,奠定了现代深度学习的基础。以下是 LeNet 的详细解析:

1. LeNet 的架构

LeNet 的原始版本(LeNet-5)包含 7 层,其中包括 2 个卷积层、2 个池化层、2 个全连接层和一个输出层。以下是 LeNet-5 的具体架构:
在这里插入图片描述
在这里插入图片描述

2. LeNet 的关键特点

卷积层

  • 卷积核:LeNet 使用了小尺寸(5×5)的卷积核,能够提取局部特征。
  • 多通道输出:通过多个卷积核,LeNet 能够提取多种特征,增加了模型的表达能力。

池化层

  • 最大池化:LeNet 使用了最大池化操作,减少了特征图的空间维度,同时保留了重要特征,提高了模型的鲁棒性。

全连接层

  • 特征转换:全连接层将卷积层提取的局部特征组合成全局特征,用于分类或回归任务。
  • 输出层:最后一个全连接层输出分类结果,通常使用 Softmax 激活函数将输出转换为概率分布。

激活函数

LeNet 使用了 Sigmoid 或 Tanh 激活函数,这些激活函数能够引入非线性特性,使得网络能够学习复杂的模式。

3. LeNet 的优点

  • 简单高效:LeNet 的结构相对简单,计算量较小,适合在资源受限的设备上运行。
  • 开创性:LeNet 是最早的卷积神经网络之一,为后续的深度学习模型奠定了基础。
  • 鲁棒性:通过卷积层和池化层的组合,LeNet 能够提取鲁棒的特征,对输入图像的平移和缩放具有一定的不变性。

4. LeNet 的缺点

  • 模型容量有限:LeNet 的结构较浅,参数数量较少,难以学习到复杂的特征,对于更复杂的任务(如大规模图像分类)性能有限。
  • 过拟合风险:由于模型容量有限,LeNet 在大规模数据集上容易过拟合。

5. LeNet 的应用场景

LeNet 最初是为手写数字识别任务设计的,特别适用于 MNIST 数据集。它也可以用于其他简单的图像分类任务,但随着任务复杂度的增加,其性能可能会受到限制。

6. LeNet 的 PyTorch 实现

以下是一个使用 PyTorch 实现的 LeNet-5 模型的代码示例:

import torch
import torch.nn as nn
import torch.nn.functional as F

class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        # 卷积层
        self.conv1 = nn.Conv2d(1, 6, kernel_size=5)  # 输入通道数为1,输出通道数为6
        self.conv2 = nn.Conv2d(6, 16, kernel_size=5) # 输入通道数为6,输出通道数为16
        # 全连接层
        self.fc1 = nn.Linear(16 * 5 * 5, 120)       # 输入特征数为16×5×5,输出特征数为120
        self.fc2 = nn.Linear(120, 84)               # 输入特征数为120,输出特征数为84
        self.fc3 = nn.Linear(84, 10)                # 输入特征数为84,输出特征数为10(分类结果)

    def forward(self, x):
        # 卷积层 + 激活函数 + 池化层
        x = F.relu(self.conv1(x))                   # 第一个卷积层 + ReLU激活函数
        x = F.max_pool2d(x, 2)                      # 第一个池化层
        x = F.relu(self.conv2(x))                   # 第二个卷积层 + ReLU激活函数
        x = F.max_pool2d(x, 2)                      # 第二个池化层
        # 展平
        x = x.view(-1, 16 * 5 * 5)                  # 将特征图展平为一维向量
        # 全连接层 + 激活函数
        x = F.relu(self.fc1(x))                     # 第一个全连接层 + ReLU激活函数
        x = F.relu(self.fc2(x))                     # 第二个全连接层 + ReLU激活函数
        x = self.fc3(x)                             # 输出层
        return x

# 测试 LeNet 模型
model = LeNet()
print(model)

7. 总结

LeNet 是卷积神经网络的经典之作,它首次将卷积层、池化层和全连接层结合起来,用于图像分类任务。虽然 LeNet 的结构相对简单,但它为后续的深度学习模型提供了重要的设计思路。在现代深度学习中,LeNet 仍然被用作教学和研究的基础模型,帮助初学者理解卷积神经网络的基本原理。

来自

  • kimi LeNet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

静思心远

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

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

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

打赏作者

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

抵扣说明:

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

余额充值