文章目录

  • 1. LeNet 简介
  • 2. LeNet 的 PyTorch 实现

1. LeNet 简介

  LeNet 原是 LeNet1 - LeNet5 这系列网络的合称,但现在所说的 LeNet 则一般特指 LeNet5 (后文统一称为 LeNet)。LeNet 是 Yann LeCun 教授于 1998 年在论文《Gradient-Based Learning Applied to Document Recognition》中提出的 ,设计之初只是用于手写数字的识别,到如今已成为卷积神经网络的 HelloWorld。受限于计算机的算力不足,加之支持向量机 (核学习方法) 的兴起,CNN 方法并未成为当时学术界认可的主流方法。

  算上输入层的话,LeNet 共有 8 层,包含 3 个卷积层,2 个池化层 (下采样层) 和 1 个全连接层。其中,所有卷积操作的核都固定为 5x5,步长为 1;统一使用全局平均池化。LeNet 的网络结构如下

  • 输入层:输入图像的尺寸为 32X32;
  • C1 层 (卷积层):使用 6 个核大小为 5×5 的卷积,得到 6 张 28×28 的特征图;
  • S2 层 (池化层,即下采样层):使用 6 个 2×2 的平均池化,得到 6 张 14×14 的特征图;
  • C3 层 (卷积层):使用 16 个核大小为 5×5 的卷积,得到 16 张 10×10 的特征图;
  • S4 层 (池化层):使用 16 个 2×2 的平均池化,得到 16 张 5×5 的特征图;
  • C5 层 (卷积层):使用 120 个核大小为 5×5 的卷积,得到 120 张 1×1 的特征图 (一个向量);
  • F6 层 (全连接层):含 84 个节点的全连接层,对应于一个 7x12 的比特图;
  • 输出层:含 10 个节点的全连接层,分别代表数字 0 到 9。

2. LeNet 的 PyTorch 实现

# _*_coding:utf-8_*_
import torch
import torch.nn as nn
import torch.nn.functional as Fclass LeNet5(nn.Module):def __init__(self, in_channels, out_channels):super(LeNet5, self).__init__()# 卷积神经网络self.features = nn.Sequential(nn.Conv2d(in_channels, 6, kernel_size=5),nn.MaxPool2d(kernel_size=2),nn.Conv2d(6, 16, kernel_size=5),nn.MaxPool2d(kernel_size=2)  # 原模型使用的是平均池化)# 分类器self.classifier = nn.Sequential(nn.Linear(16 * 5 * 5, 120 * 1 * 1),  # 这里将第三个卷积层看成是全连接层nn.Linear(120, 84),nn.Linear(84, out_channels))def forward(self, x):x = self.features(x)x = torch.flatten(x, 1)  # 铺平tensorx = self.classifier(x)out = F.softmax(x, 1)  # 激活函数return outif __name__ == "__main__":batch_size = 1in_channels = 1out_channels = 10inputs = torch.rand((batch_size, in_channels, 32, 32))  # (B, C, H, W)lenet = LeNet5(in_channels, out_channels)outputs = lenet(inputs)print(outputs)print(outputs.sum())print(outputs.max())print(torch.argmax(outputs, 1))

【参考】

  1. 卷积神经网络之Lenet;
  2. CNN发展简史——LeNet(一);
  3. pytorch LeNet 模型;

LeNet 神经网络相关推荐

  1. Lenet神经网络实现

    手写字体识别模型LeNet5诞生于1994年,是最早的卷积神经网络之一.LeNet5通过巧妙的设计,利用卷积.参数共享.池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别, ...

  2. c语言实现图片卷积_卷积神经网络(CNN)Python的底层实现——以LeNet为例

    本文介绍了如何使用Python从底层实现一个简单但经典的卷积神经网络结构--LeNet,并用它完成MNIST手写数字识别任务. 具体的完整代码以及代码的使用方法,可以光顾我的Github Profes ...

  3. [人工智能-深度学习-33]:卷积神经网络CNN - 常见分类网络- LeNet网络结构分析与详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  4. Tensorflow系列 | TensorFlow 实战卷积神经网络之 LeNet

    编译 | fendouai 编辑 | 安可 [导读]:前几篇文章中我们介绍了一些机器学习.深度学习入门资源项目合集,本篇则是对继五大卷积神经网络原理介绍之后的实战延续,同样来自fendouai老师.下 ...

  5. NNDL 实验六 卷积神经网络(3)LeNet实现MNIST 手动算子部分

    手写体数字识别是计算机视觉中最常用的图像分类任务,让计算机识别出给定图片中的手写体数字(0-9共10个数字).由于手写体风格差异很大,因此手写体数字识别是具有一定难度的任务. 我们采用常用的手写数字识 ...

  6. 利用LeNet识别十种动物和水果

    简 介: ※利用经典的LeNet深度学习网络,可以完成对于智能车竞赛中智能视觉组对搬运物品分类的要求.虽然实际比赛中还会包含有五种交通工具,那么利用LeNet仍然是可以完成小类别的识别与定位的.仅仅使 ...

  7. [Kaggle] Digit Recognizer 手写数字识别(卷积神经网络)

    文章目录 1. 使用 LeNet 预测 1.1 导入包 1.2 建立 LeNet 模型 1.3 读入数据 1.4 定义模型 1.5 训练 1.6 绘制训练曲线 1.7 预测提交 2. 使用 VGG16 ...

  8. TensorFlow神经网络(八)卷积神经网络之Lenet-5

    一.Lenet神经网络基本结构 [注]内容来自MOOC人工智能实践TensorFlow笔记课程第七讲第2课 注意,最后将第二池化层后的输出拉直送入全连接层. Lenet神经网络特点: ① 卷积.池化. ...

  9. [Pytorch系列-35]:卷积神经网络 - 搭建LeNet-5网络与CFAR10分类数据集

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

最新文章

  1. Linux如何实现断点续传文件功能?
  2. 我们从2021谷歌I/O大会给的谜题中发现了隐藏信息
  3. Python 开发面试题
  4. UVa 11100 旅行2007
  5. 免费指纹浏览器破解方法之开源代码
  6. wuhan2020新型冠状病毒防疫信息收集平台社区版非正式发布
  7. Asp.Net Core使用Skywalking实现分布式链路追踪
  8. 安装开源 ITIL 门户 iTOP
  9. idea连接sqlserver及数据库操作
  10. 解决虚拟机在能ping通网关情况下出现From 192.168.1.10: icmp_seq=1 Redirect Network(New nexthop: 192.168.1.1)问题
  11. Gradle Builds Everthing —— 产物输出
  12. 韩语在线翻译图片识别_Text Scanner for Mac(ocr文字识别工具)
  13. 获取选股宝7x24小时数据
  14. Unix Domain Sockets
  15. qq安装路径无效Linux,QQ提示安装路径无效您没有权限的两种解决办法
  16. 用 Python 轻松将懂车帝视频转换为文本
  17. 计算机中rom,计算机中rom指的是内存还是外存
  18. thinkphp引入阿里云视频点播
  19. (灵魂拷问)MySQL数据库高频面试题,助你脱颖而出
  20. 视频监控存储特点分析

热门文章

  1. Linux配置jdk后,不生效
  2. 为啥 redis 使用 跳表 (skiplist) 而不是使用 red-black?
  3. 获取ubuntu管理员权限
  4. 5g时代,选华为p30 or 苹果?
  5. git之恢复误删的本地文件
  6. java删除文件夹下所有的内容
  7. Linux - lsof显示 tcp,udp 的端口和进程
  8. vue 组件切换 保持组件的状态 keep-alive
  9. spyder python教程_如何在python(spyder)中解析参数?
  10. 第三次(二):对比分析SLG 率土之滨 VS 三国志2017