秃姐学AI系列之:LeNet + 代码实现

news2025/2/5 17:46:20

目录

LeNet 

MNIST数据集

LeNet模型图

​编辑

总结

代码实现:卷积神经网络 LeNet

LeNet(LeNet-5)由两个部分组成:卷积编码器核全连接层密集块

 检查模型


LeNet 

卷积神经网络里面最为著名的一个网络,80年代末提出来的,被广泛应用在银行、邮递行业

用于手写数字识别的一个模型

MNIST数据集

  • 50000个训练数据(在80年代末期是一个很大的数据集了,那时候内存都只有几兆)
  • 10000个测试数据
  • 图像大小 28 x 28,已经scale好了,数字都放在图像的中间,是一个灰度图
  • 10类

很长一段时间,这个数据集的知名度远高于LeNet模型 

LeNet模型图

输入一个32 x 32的image图像

-->放入一个5 x 5的卷积层,输出通道为6

-->一个2 x 2的pooling池化层,把28 x 28池化为6通道的14 x 14

-->再接一个卷积层,仍然是 5 x 5的卷积核,输出编程16通道的10 x 10

--> 一个pooling层,高宽减半,输出通道数不变

-->拉成一个向量,放到mlp全连接层,输出为120

-->第二个全连接层输出为84

-->一个高斯层(但是现在不用了,也可以理解成一个全连接层),最后输出为10(Softmax一下转换为10类的可能性输出)

总结

  • LeNet是早期成功的神经网络
  • 先使用卷积层来学习图片空间信息
  • 通过池化层来降低图片位置敏感度
  • 最后使用全连接层来转换到类别空间(10类)

代码实现:卷积神经网络 LeNet

LeNet(LeNet-5)由两个部分组成:卷积编码器核全连接层密集块

为了非线性,在每个卷积后面都加了一个Sigmoid激活函数

import torch
from torch import nn
from d2l import as d2l

class Reshape(torch.nn.Module):
    def forward(self, x):
        return x.view(-1, 1, 28, 28)

net = torch.nn.Sequential(
     Reshape(), nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid()
     nn.AvgPool2d(kernel_size=2, stride=2),
     nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),
     # Flatten():第一维度保持住,后面全部拉成一个维度
     nn.AbgPool2d(kernel_size=2, strid=2), nn.Flatten(),
     nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),
     nn.Linear(120, 84), nn.Sigmoid(),
     nn.Linear(84, 10))

 检查模型

因为我们是nn.Sequential定义的,所以可以每一层拿出来算一下

这里是用了__name__,也可以使用PyTorch的summary

X = torch.rand(size=(1, 1, 28, 28), dtype=torch.float32)
for layer in net:
    X = layer(X)
    print(layer.__class__.__name__, 'output shape:\t', X.shape)

输出如下: 

 我们可以看到

  • 第一个block(卷积层+激活+池化):

        【1, 1, 28, 28】 ---> 【1, 6, 14, 14】

        做了一个图片大小减半,通道数从1扩到了6的操作,总体来说数据其实是变多了

  • 第二个block:

        【1, 6, 14, 14】---> 【1, 16, 5, 5】

        图片大小减少了大概三倍,通道数从6扩到16

  • 三层MLP:

        【1,400】--->【1, 120】--->【1, 84】--->【1, 10】

模型核心思想:我们前面讲过一个通道可以看成是一个模式,整个LeNet做的就是不断地把空间信息压缩压缩,然后把抽出来压缩的信息放在不同的通道里面,最后通过几个MLP将不同模式的通道进行融合成我们最后的输出

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【vue教程】七. Vue 的动画和过渡

文章目录 往期列表回顾本章涵盖知识点Vue 的内置动画系统基本的进入和离开过渡列表过渡 CSS 过渡CSS 过渡基础Vue 中的 CSS 过渡 JavaScript 动画使用 JavaScript 钩子 第三方动画库的使用集成 Animate.css 实例演示创建一个简单的动画应用 结语 往期列表 【vue教程】一. 环境…

iOS18升级出现白苹果、无法重启等问题,要怎么解决

随着苹果iOS 18系统beta版本的推出,不少用户在私信说升级后遇到了白苹果和无法重启等问题。这些问题不仅影响了大家的正常使用,还会导致数据丢失和系统崩溃。本文将详细介绍iOS 18升级后出现白苹果、无法重启等问题的原因及解决方法,帮助大家…

日期转时间濯

tfunction(date_str) local code ,time World:getTimeFromDateString(date_str) return time/(60*60*24) end print(t(2024-08-16)-t(2024-08-3))

指针 (四)

一 . 指针的使用和传值调用 (1)strlen 的模拟实现 库函数 strlen 的功能是求字符串长度,统计的是字符串中 \0 之前的字符个数,函数原格式如下: 我们的参数 str 接收到一个字符串的起始地址,然后开始统计…

JS 获取当前操作系统类型

在JavaScript中,‌直接获取用户的操作系统信息是不可能的,‌因为JavaScript主要运行在浏览器中,‌而浏览器出于安全和隐私的考虑,‌不会提供访问操作系统详细信息的API。‌ 但是,‌你可以通过分析用户代理字符串&…

数据库性能定位-慢sql定位、sql优化(docker容器实战)

安装好mysql数据之后,创建库的时候,要注意选择 字符集编码。如果没有选择好,你的库表存中文的时候,会字符集乱码。选择utf8mb4. 建表的时候,存储引擎 InnoDB、MyISAM mysql5.7及以后数据库,表的默认存储引…

官方招募 | 仓颉语言三方库社区建设全速启航,全球开发者、技术大神只等您!

Cangjie-TPC招募令 仓颉社区的小伙伴们,官方三方库(Cangjie-TPC)招募开始啦! Cangjie-TPC(https://gitcode.com/Cangjie-TPC) 是 Cangjie 社区用于汇集基于仓颉编程语言开发的开源三方库的主干仓&#xf…

JS获取当前浏览器名称

在JavaScript中,获取当前浏览器名称的方法并不是一个标准的功能,因为浏览器厂商并没有提供一个直接的API来获取浏览器的名称。但是,你可以通过分析用户代理字符串(User-Agent)来推断出浏览器的名称。 以下是一个简单的…

ArcGIS如何将投影坐标系转回为地理坐标系

有时候两个数据,一个为投影坐标系,另一个为地理坐标系时,在GIS软件中位置无法叠加到一起,这需要将两个或多个数据的坐标系统一,可以直接将地理坐标系的数据进行投影,或将投影坐标系转为地理坐标系。下面介绍…

视频号AI美女跳舞,轻松月入30000+,蓝海赛道,流量池巨大,起号猛

今天给大家分享的是一个男生比较感兴趣的内容,AI美女视频跳舞项目4.0版本,7天快速起号,实现每月30000的稳定收入. 大家刷抖音的时候,肯定都刷到过美女跳舞的视频,对吧?这种视频,不管在哪个平台…

电商项目DevOps一体化运维实战

主要讲了git和jkins的使用,其中maven的一个插件还挺好用的,主要可以用来查看哪些类没有使用,哪些导入的包是多余的等。这里展示一下用法。至于git和jkins的搭建后续再操作。 maven插件的使用: 编译后就可以在target下面看到这个h…

网络安全之XSS基础

从 XSS Payload 学习浏览器解码 xss payload 1.<a href"%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">1</a> 2.<a href"&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:…

代码随想录:动态规划6-10

62、不同路径 题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径…

基于STM32开发的智能农业环境监控系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化传感器数据采集与处理环境控制与状态指示Wi-Fi通信与远程监控应用场景 农业温室环境管理农田环境监控与自动化管理常见问题及解决方案 常见问题解决方案结论 1. 引言 随着农业技术…

Codigger 视频会议(Meeting):制造业的高效协作引擎

在制造业数字化转型的浪潮中&#xff0c;企业面临着前所未有的机遇与挑战。视频会议作为一种高效的沟通工具&#xff0c;在制造业中发挥着关键作用。 制造业对于视频会议有着多方面的需求与挑战。不同生产基地往往分布在各地&#xff0c;跨地域协作需求十分迫切。在技术交流时&…

stm32—ADC

1. 什么是ADC 生活中我们经常会用到ADC这种器件&#xff0c;比如说&#xff0c;当我们在使用手机进行语音通信时&#xff0c;ADC器件会将我们的声信号转换为电信号 (模拟信号 ---> 数字信号) 模拟信号&#xff1a; 模拟信号是指用连续变化的物理量表示的信息&#xff0c;其信…

【Vue3】编程式路由导航

【Vue3】编程式路由导航 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…

【Qt】 常用控件QLCDNumber

常用控件QLCDNumber QLCDNumber是一个专门用来显示数字的控件&#xff0c;类似于“老式计算机”的效果。 QLCDNumber的属性 属性说明 intValue QLCDNumber 显⽰的数字值(int). value QLCDNumber 显⽰的数字值(double). 和 intValue 是联动的. 例如给 value 设为 1.5, i…

C语言程序设计-练习篇

山海自有归期&#xff0c;风雨自有相逢。 一 下面代码的结果是什么&#xff1f; int main() { int i 0; for (i 0; i < 10; i) { if (i 5) //此处为赋值&#xff0c;i 5表达式结果为5 printf("%d ", i); //表达式为真&a…

AI 进阶实战 | 走进大模型(LLM)+智能体(Agent)+提示词(Prompt)

前言 人工智能&#xff08;AI&#xff09;不再只是科幻电影中的桥段&#xff0c;而是正以前所未有的速度改变着我们的世界。随着大规模语言模型&#xff08;LLM&#xff09;系列的崛起&#xff0c;结合高度智能的&#xff08;Agent&#xff09;与精心设计的&#xff08;Prompt…