经典的神经网络#1 Lenet

经典的神经网络#1 Lenet

关注B站查看更多手把手教学:

肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com)

网络结构介绍

LeNet的论文地址为:**http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf**。这篇论文名为《Gradient-Based Learning Applied to Document Recognition》,是Yann LeCun等人在1998年发表的,介绍了LeNet-5卷积神经网络,该网络主要用于手写数字识别。

LeNet是由Yann LeCun等人在1998年提出的一种经典的卷积神经网络(Convolutional Neural Network, CNN)架构,最初被设计用于识别手写数字和打印字符等任务。LeNet是深度学习领域最早的卷积神经网络之一,也是现代CNN架构的重要先驱之一。

LeNet的网络结构相对较小,但包含了卷积层、池化层和全连接层等基本组件,这些组件也是现代CNN架构的核心部分。具体来说,LeNet包含两个卷积层、两个池化层和三个全连接层(包括输出层),其中每个卷积层后面都跟着一个池化层。卷积层用于提取输入图像的特征,池化层则用于降低数据的维度和减少计算量,同时保留重要的特征信息。全连接层则用于将前面提取到的特征进行整合和分类。

在LeNet中,输入图像首先经过第一个卷积层,该层包含6个卷积核,大小为5x5,步长为1。卷积操作后,得到6个特征图(feature map),每个特征图都包含了输入图像的不同特征信息。接着,这些特征图经过一个2x2的池化层进行下采样,以减少数据的维度和计算量。然后,再经过一个卷积层和池化层的组合,得到更多的特征图。最后,这些特征图被展平并输入到三个全连接层中,以进行分类和识别。

LeNet的一个重要特点是使用了局部连接和权值共享的策略,这大大减少了网络中的参数数量,降低了过拟合的风险,并提高了模型的泛化能力。此外,LeNet还采用了Sigmoid激活函数和均方误差损失函数等常见的神经网络组件和技巧。

总的来说,LeNet是一种经典的卷积神经网络架构,具有简单、高效和易于实现等优点。虽然在现代深度学习应用中,LeNet的性能可能已经被更先进的模型所超越,但它仍然具有重要的历史意义和学术价值,被广泛应用于计算机视觉、图像处理和自然语言处理等领域。同时,LeNet也为后来的卷积神经网络设计提供了重要的思路和启示。

Pytorch实现

在PyTorch中实现LeNet-5架构是相对简单的。以下是一个基本的LeNet-5模型的PyTorch实现示例:

python 复制代码
import torch  
import torch.nn as nn  
import torch.nn.functional as F  
  
class LeNet(nn.Module):  
    def __init__(self, num_classes=10):  
        super(LeNet, self).__init__()  
        # Convolution (In LeNet-5, 32x32 images are given as input. Hence padding of 2 is done below)  
        self.conv1 = nn.Conv2d(1, 6, 5, padding=2)  
        self.conv2 = nn.Conv2d(6, 16, 5)  
        # Fully connected layers  
        self.fc1 = nn.Linear(16*5*5, 120)  
        self.fc2 = nn.Linear(120, 84)  
        self.fc3 = nn.Linear(84, num_classes)  
  
    def forward(self, x):  
        # Convolution with ReLU activation  
        x = F.relu(self.conv1(x))  
        # Max pooling over 2x2 grid  
        x = F.max_pool2d(x, 2)  
  
        x = F.relu(self.conv2(x))  
        x = F.max_pool2d(x, 2)  
  
        # Flatten the tensor  
        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  
  
# Instantiate the model  
model = LeNet(num_classes=10)  
  
# Print the model architecture  
print(model)

请注意,原始的LeNet-5是为32x32像素的输入图像设计的,并且假设输入是单通道的(例如灰度图像)。上面的代码遵循了这一设计,并使用了两个卷积层,每个卷积层后面都跟着一个ReLU激活函数和一个2x2的最大池化层。然后,特征图被展平,并通过三个全连接层进行分类。

然而,你可能需要根据你的具体任务和数据集来调整网络架构,比如输入图像的大小、通道数以及最后的分类类别数。

如果你处理的是彩色图像(例如RGB图像),你需要将输入通道数从1改为3:

python 复制代码
self.conv1 = nn.Conv2d(3, 6, 5, padding=2)

同样,如果你的输入图像大小不是32x32,你可能需要调整卷积层和池化层的参数,以及全连接层的输入尺寸,以确保维度匹配。

最后,num_classes参数应该根据你的数据集中类别的数量来设置。在上面的例子中,它被设置为10,适合用于像MNIST这样的手写数字分类任务。

相关推荐
深兰科技几秒前
深兰科技携手绿地集团布局行业智能体,绿地深兰科技智能体科技公司揭牌
人工智能·科技·启发式算法·推荐算法·深兰科技·绿地集团·deepagent
AIVOClaw容剪4 分钟前
AI 成片系统搭建如何让矩阵号差异化从「同一脚本 50 个号发」变成「反推提示词每号一版」——5 模块防止同质化被判搬运 · AI 视频智能体平台
人工智能·矩阵·音视频
A153625515 分钟前
WMS 仓储系统的软件有哪些?2026 主流产品分类与选型参考
大数据·人工智能
爱炼丹的James18 分钟前
目标检测任务
人工智能·深度学习
春末的南方城市21 分钟前
消费级显卡迎来实时视频生成!FastVideo 开源 FastWan-QAD,RTX 5090 实现 1.8 秒生成 5 秒 480P 视频!
人工智能·深度学习·计算机视觉·aigc·音视频
ivywriter22 分钟前
【具身智能】VLA大模型和世界模型有什么区别?
人工智能
Thom58022 分钟前
【迅投 QMT】QMT如何获取ETF申赎清单?download_etf_info()与get_etf_info()教程
人工智能·经验分享·量化交易·ptrade·量化编程
大强同学26 分钟前
我的 AI 真实使用情况与深度复盘
人工智能
正在走向自律28 分钟前
我用 Doubao-Seed-Evolving 搭了个 AI 智能教育助手,从自适应评测到错因诊断的全程实测
人工智能·seed-evolving·ai智能教育·自适应评测·ai答疑·知识点树管理
@LiX28 分钟前
深度学习基本原理
人工智能·深度学习