LeNet跟LeNet5详解

1 LeNet结构

主要是为了手写数字识别

具体结构讲解:从图中例子可得

1 先传入一个灰度图像尺寸为1x28x28,通道数为1,尺寸为28x28的灰度图像

2 第一层5x5卷积,经过公式 输入图像尺寸-卷积核尺寸+2padding/步长+1,(其中,因为是正方形,所以长宽都一样,直接一个式子得出)因为没有padding,输出特征图20个通道,24x24的尺寸。

3 经过第二层Pooling层,计算方式同上,得到20x12x12

4 在经过第三层5x5卷积,输出50x8x8,

5 第四层Polling,得到50x4x4

6 扁平化然后reshape为500x1的神经元用于全连接(也可以把上述得到的进行扁平化再进行一次全连接,800 -500)

7 然后Relu激活函数

8 全连接输出 10x1,代表十个数字的置信度

9 使用softmax来计算输出的值的在0-9的概率

(上述,其实上述每一层卷积都要使用Relu激活函数),下面代码复现再具体看

2 代码复现

import torch
import torch.nn as nnclass LeNet(nn.Module):def __init__(self) -> None:super().__init__()self.features = nn.Sequential(nn.Conv2d(in_channels=1, out_channels=20, kernel_size=5, stride=1, padding=0),nn.ReLU(),nn.MaxPool2d(kernel_size=(2, 2), stride=2),nn.Conv2d(in_channels=20, out_channels=50, kernel_size=5, stride=1, padding=0),nn.ReLU(),# nn.MaxPool2d(kernel_size=(2, 2), stride=2),nn.AdaptiveMaxPool2d((4, 4))  # 这个是为了不止让限制为28x28的输入图像)self.classify = nn.Sequential(nn.Linear(50 * 4 * 4, 500),nn.ReLU(),nn.Linear(500, 10))def forward(self, x):z = self.features(x)z = z.view(-1, 800)z = self.classify(z) return zif __name__ == '__main__':net = LeNet()img = torch.randn(2, 1, 28, 28)scores = net(img)print(scores)probs = torch.softmax(scores, dim=1)print(probs)

3 LeNet5

结构图

C1层

C1层是一个卷积层

将输入的1x32x32 通过5x5卷积,卷积成 6x28x28的feature map

S2层

S2层是一个下采样层,对C1层的进行下采样,把6x28x28池化成6x14x14

和max pooling和average pooling不一样, 在C1中每个单元的4个输入相加, 乘以一个可训练参数w, 再加上一个可训练偏置b, 结果通过sigmoid函数计算得到最终池化之后的值
就是说对于C1层,每个2x2的区域进行相加,类似如使用2x2卷积,步长为2,然后每个区域4个值乘以一个可训练参数w, 再加上一个可训练偏置b, 结果通过sigmoid函数计算得到最终池化之后的值

3 C3层

C3层是一个卷积层,使用的是5x5卷积,把6x14x14卷积成16x10x10

但是这个卷积跟平常卷积不一样,使用的是类似分组卷积的东西,不过也不一样,如下图

每次卷积核每次卷积不同的通道来提取特征,得到15个通道,比如第一个通道卷积他的前三层通道来输出第一个通道,以此类推

S4层

S4层是一个下采样层 (和S2一样),具体看S2,把16x10x10下采样为16x5x5

C5层

C5层是一个卷积层,使用5x5卷积,把16x5x5卷积成120x1x1,也就是用于下面全连接

6 F6 F7层

F6 7层是一个全连接层

把120x1最后全连接为10x1用来做置信度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/434988.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JasperReports渲染报表文件时候,读取图片报错:Byte data not found at:xxx.png.\r\n\tat

目录【知识星球】 1.1、错误描述 1.2、解决方案 1.1、错误描述 最近在工作中,使用JasperReports报表比较多一些,有次线上环境里面运行报错,查看报错日志,如下所示: net.sf.jasperreports.engine.JRException: Byte…

Android源码设计模式解析与实战第2版笔记(五)

第七章 时势造英雄 – 策略模式 策略模式的定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 策略模式的使用场景 针对同一类型问题的多种处理方式,仅仅…

掌握assert的使用:断言在错误检查和调试中不可或缺

断言在错误检查和调试中不可或缺 一、简介二、断言的基本语法和用法三、错误检查与断言四、 调试与断言五、避免滥用断言六、总结 一、简介 断言是一种在程序中用于检查特定条件是否满足的工具。一般用于验证开发者的假设,如果条件不成立,就会导致程序报…

51-17 视频理解串讲— MViT 论文精读

继TimeSformer模型之后,咱们再介绍两篇来自Facebook AI的论文,即Multiscale Vision Transformers以及改进版MViTv2: Improved Multiscale Vision Transformers for Classification and Detection。 由于本司大模型组最近组织阅读的论文较多,…

ubuntu20.04 安装ROS2 记录

主要参考B站古月居的ROS2入门21讲 和 以下链接(基本和视频上一致) ubuntu20.04安装ROS2 详细教程_ubuntu20.04 ros2-CSDN博客 但是中间有些需要注意的地方, 1,添加源 步骤中提到 sudo curl -sSL https://raw.githubuserconten…

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展,网络传输中的数据安全性受到了前所未有的关注。HTTPS,作为HTTP的安全版本,为数据在客户端和服务器之间的传输提供了加密和身份验证,从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…

分类预测 | Matlab实现DT决策树多特征分类预测

分类预测 | Matlab实现DT决策树多特征分类预测 目录 分类预测 | Matlab实现DT决策树多特征分类预测分类效果基本描述程序设计参考资料分类效果

QT发生弹出警告窗口

QTC开发程序弹出警告窗口&#xff0c;如上图 实施代码&#xff1a; #include <QMessageBox> int main() {// 在发生错误的地方QMessageBox::critical(nullptr, "错误", "发生了一个错误&#xff0c;请检查您的操作。");}上面的文字可以更改&#x…

openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板

文章目录 openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板概述笔记工程中需要的openssl的库实现END openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板 概述 openssl3.2 - 测试程序的学习 整了几个test.c, 每开一个新的测试工程, 总要改这改那的. …

Spring Boot 中使用 Spring MVC基础

Spring MVC基础 一、控制器 controller1.定制控制器的方法&#xff08;1&#xff09;接收请求&#xff08;2&#xff09;接收请求参数&#xff08;3&#xff09;返回值 二、模型 Modle三、视图 View四、总结 Spring MVC 是非常著名的 Web 应用框架&#xff0c;现在的大多数 Web…

AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀

目录 引言 1. Python在股票市场分析中的应用 2. 投资组合优化 3. 风险管理与预测 时间序列分析 机器学习在风险预测中的应用 大数据分析与风险建模 总结 ⭐️ 好书推荐 【内容简介】 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默…

代码随想录算法训练营day4 | 链表(2)

一、LeetCode 24 两两交换链表中的节点 题目链接&#xff1a;24.两两交换链表中的节点https://leetcode.cn/problems/swap-nodes-in-pairs/ 思路&#xff1a;设置快慢指针&#xff0c;暂存节点逐对进行交换。 代码优化前&#xff1a; /*** Definition for singly-linked list…