经典的神经网络#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这样的手写数字分类任务。

相关推荐
xwz小王子1 天前
Science Robotics基础模型正在改写机器人集群的“游戏规则”
数据库·人工智能·机器人
UXbot1 天前
独立设计师UI设计工具推荐(2026):支持AI原型生成与代码导出的5款工具全面评价
前端·人工智能·低代码·ui·交互·产品经理·web app
Mr数据杨1 天前
【CanMV K210】AI 视觉 KPU 人脸检测与实时框选显示
人工智能·硬件开发·canmv k210
echoy_1891 天前
Dexter:24h 不下班的 AI 金融分析师
人工智能·金融
挽星安1 天前
代码随想录算法训练营第五十天|卡码网 99 岛屿数量、卡码网 100 最大岛屿的面积
算法
葫三生1 天前
《论三生原理》系列构建文理同构的认知体系?
人工智能·科技·深度学习·算法·机器学习·transformer
知识领航员1 天前
2026年推荐6个AI音乐工具
java·人工智能·python·eclipse·django·php·pygame
石逸凡1 天前
保持手感与AI发展
人工智能
柠檬威士忌9851 天前
2026-05-09 AI 前沿日报:算力战争、训练网络与前沿模型监管进入新阶段
网络·人工智能
如去1 天前
第五篇《AI在金融领域的深度渗透:风控、投研与普惠金融的革新》
人工智能