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

2024-08-21 00:52

本文主要是介绍秃姐学AI系列之:LeNet + 代码实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

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 d2lclass 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将不同模式的通道进行融合成我们最后的输出

这篇关于秃姐学AI系列之:LeNet + 代码实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091654

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin