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

相关推荐
baiduopenmap14 分钟前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
小任同学Alex17 分钟前
浦语提示词工程实践(LangGPT版,服务器上部署internlm2-chat-1_8b,踩坑很多才完成的详细教程,)
人工智能·自然语言处理·大模型
新加坡内哥谈技术23 分钟前
微软 Ignite 2024 大会
人工智能
江瀚视野1 小时前
Q3净利增长超预期,文心大模型调用量大增,百度未来如何分析?
人工智能
带多刺的玫瑰1 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
爱敲代码的憨仔1 小时前
《线性代数的本质》
线性代数·算法·决策树
陪学1 小时前
百度遭初创企业指控抄袭,维权还是碰瓷?
人工智能·百度·面试·职场和发展·产品运营
QCN_1 小时前
湘潭大学人工智能考试复习1(软件工程)
人工智能
Landy_Jay1 小时前
深度学习:GPT-1的MindSpore实践
人工智能·gpt·深度学习
白光白光1 小时前
量子神经网络
人工智能·深度学习·神经网络