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

相关推荐
凌肖战几秒前
力扣上刷题之C语言实现(数组)
c语言·算法·leetcode
新加坡内哥谈技术4 分钟前
口哨声、歌声、boing声和biotwang声:用AI识别鲸鱼叫声
人工智能·自然语言处理
wx74085132615 分钟前
小琳AI课堂:机器学习
人工智能·机器学习
FL162386312922 分钟前
[数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别
人工智能·yolo·目标检测
YesPMP平台官方24 分钟前
AI+教育|拥抱AI智能科技,让课堂更生动高效
人工智能·科技·ai·数据分析·软件开发·教育
秋夫人27 分钟前
B+树(B+TREE)索引
数据结构·算法
FL16238631291 小时前
AI健身体能测试之基于paddlehub实现引体向上计数个数统计
人工智能
黑客-雨1 小时前
构建你的AI职业生涯:从基础知识到专业实践的路线图
人工智能·产品经理·ai大模型·ai产品经理·大模型学习·大模型入门·大模型教程
子午1 小时前
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
人工智能·python·cnn
梦想科研社1 小时前
【无人机设计与控制】四旋翼无人机俯仰姿态保持模糊PID控制(带说明报告)
开发语言·算法·数学建模·matlab·无人机