卷积神经网络(一)-LeNet-5

news2024/11/15 4:53:24

前言

        LeNet开启了卷积神经网络的第一枪,这一网络模型由Yann LeCun等人在1998年提出,被视为卷积神经网络的开山之作。

论文地址:

http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

如果打不开就看csdn:

https://download.csdn.net/download/p731heminyang/89515637

 

LeNet-5解析

我们通过解析lenet这个最简单的卷积网络来慢慢熟悉神经网络,经典图如下:

通过上面的图可以看到整个网络包含7层

我们如下分析每一层:

卷积计算公式:卷积池化尺寸计算公式_rgb卷积池化计算-CSDN博客

不熟悉的可以先看看卷积的公式,这样可以熟悉下输入和输出如何对应,如何通过输入输出来大体推算卷积核,由于lenet-5没有填充那么就更好分析了,具体如下。

卷积层:是为了获取特征,特征值复杂就需要多层特征提取,增加感受野

池化层:是为了减少计算量简化特征和防止过拟合

全连接层:是为了输出结果

lenet-5 目的主要用于识别数字的算法,所以后面输出层为10,对应10个数字(0~9)。

第一层(卷积层):

输入参数:32x32  ,先针对图片进行处理,变成32x32的数组,再对其进行归一化处理,方便计算,这里通道为1,属于黑白图

输出参数:6x28x28 ,   经过卷积核的处理得到了此参数

卷积核:6x5x5 ,通过输出参数深度参数6,可以知道经过了6个卷积核的处理,这里的卷积步长都是为1,而且没有填充,按照公式就是 28=(32-N)/1 +1  推算出N=5

参数个数:156 ,卷积核为y=wx+b  ,参数等于权重w格式和b的个数,这里有6个wx+b,w为卷积核为5x5,b就是常数 1,所以参数个数为6x(5x5+1) = 156

第二层(池化层):

输入参数:6x28x28  ,上一层的输出

输出参数:6x14x14, 从这里可以看出维数减半了,那么一般是常用的滤波器2x2,步长为2

滤波器:2x2,步长为:2   通过公式刚好:14 = (28 - N)/2 +1  这里N为2

参数个数:0,  池化层没有权重,一般是最大权重或者最小权重或者平均权重,正常的都是最大权重,选择最大值。

第三层(卷积层):

输入参数:6x14x4,上一层的输出

输出参数:16x10x10, 这里有16个卷积核 

卷积核:16x5x5,步长为:1 ,10=(14-N)/1 +1  推算出N=5

参数个数:416, 16x(5x5 + 1)=416

第四层(池化层):

输入参数:16x10x10,上一层的输出

输出参数:16x5x5, 从这里可以看出维数减半了,那么一般是常用的滤波器2x2,步长为2

滤波器:2x2,步长为:2   通过公式刚好:5 = (10 - N)/2 +1  这里N为2

参数个数:0,  池化层没有权重,一般是最大权重或者最小权重或者平均权重,正常的都是最大权重,选择最大值。

第五层(全连接层):

输入参数:16x5x5,上一层的输出

输出参数:120,输出一维数组

参数个数:48,120,  由于是全连接层,所以每个点都得计算,输入点数:16x5x5 =400,由于全连接层转为1维,那么每个点都得配置权重,如y=wx+b  这里的x为(16x5x5),有120组wx+b,那么参数个数为:120x(16x5x5+1) = 48120

第六层(全连接层):

输入参数:120

输出参数:84

参数个数:10,164,  有84组wx+b,x为120,所以为,84x(120+1)=10164

第七层(全连接层输出):

输出为10,代表每个数字的概率,这里是越接近0概率越高,如果1的位置为0,那么这张图片识别为1

输入参数:84

输出参数:10

参数个数:850,  有10组wx+b,x为84,所以为,10x(84+1)=850

总结:

        CNN网络的开山之作,很简单的结构,总共就7层,整体的参数个数:59,706  参数接近6万,参数量相对于现在来说是已经很小了,由于之前受计算机性能和数据等影响,也没法发展太大的网络框架。但是此框架给我们开了一个头,而且由于他的简单方便我们学习。

        由于这里是识别数字或者字母,特征形状很简单,所以2个卷积层来获取特征就学习到了,学习边缘和形状,一般来说层数越多学习到的特征越多,比如说颜色纹理这些都可以学习到,但是也不是绝对,后续CNN网络发展可以看到当网络层数达到一定得程度效率和精确度、泛化就会到达峰值了,需要更换新的网络结构,比如残差连接、激活参数等。

        整个过程分为前向传播、计算损失(误差)、反向传播、更新参数

  1.         前向传播:把数据输入网络框架,通过网络计算得到结果
  2.         计算损失:通过损失函数计算真实结果和计算结果的误差值
  3.         反向传播:和前向传播相反,从输出层开始,通过误差反向计算每个权重的梯度
  4.         更新参数:根据反向传播得到的梯度调整网络参数,迭代进行以改善模型性能

        如果不是训练,只是推理的话,那么只要前向传播就行了。

代码:(基于pytyhon的pytorch)

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

class LeNet5(nn.Module):
    #初始化模型结构
    def __init__(self):
        super(LeNet5, self).__init__()
        self.conv1 = nn.Conv2d(1, 6, kernel_size=5)#卷积层1
        self.conv2 = nn.Conv2d(6, 16, kernel_size=5)#卷积层3
        self.fc1   = nn.Linear(16*5*5, 120)#全连接层5
        self.fc2   = nn.Linear(120, 84)#全连接层6
        self.fc3   = nn.Linear(84, 10)#全连接层7
    #前向传播函数 
    def forward(self, x):
        x = F.relu(self.conv1(x))#卷积+激活,添加了激活函数,线条才会拐弯
        x = F.max_pool2d(x, (2, 2))#最大池化
        x = F.relu(self.conv2(x))
        x = F.max_pool2d(x, (2, 2))#最大池化
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

# 初始化网络
model = LeNet5()

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss() #定义了交叉熵损失函数
optimizer = optim.SGD(model.parameters(), lr=0.001) #随机梯度下降(SGD)优化器 学习率为0.001,每次变化0.001

# 加载数据集,例如MNIST
transform = transforms.Compose([transforms.ToTensor(),
                                transforms.Normalize((0.5,), (0.5,))])
trainset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)

# 训练网络,训练10轮
for epoch in range(10):  # loop over the dataset multiple times
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()#反向传播修改权重
        optimizer.step()
        
        running_loss += loss.item()
    print(f'Epoch {epoch + 1}, Loss: {running_loss / (i + 1)}')

print('Finished Training')

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

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

相关文章

LangChain-v0.2 Build an Agent 构建代理

语言模型本身不能采取行动,它们只是输出文本。LangChain的一个重要用例是创建代理。代理是使用LLM作为推理引擎来确定要采取哪些行动,以及传递哪些输入的系统。执行操作后,可以将结果反馈到LLM中,以确定是否需要更多操作&#xff…

陪玩系统小程序模式APP小程序H5系统搭建开发

随着移动互联网的营及和游戏行业的蓬轨发展,陪玩服务应远而生并迅速唱起,陪玩系统小程序作为连接游戏玩家与陪玩师的桥梁,其模式系统的搭建与开发是得尤为重要,本文将洋细凰述陪玩系统小程宗模式系统的搭建开发流程,包…

基础动态规划题目基础动态规划题目

目录 题目1: P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles 代码示例: 题目2: Common Subsequence 代码示例 题目3 :最长上升子序列 最长不下降子序列 最长上升子序列oj答案 题目1: P1216 [USACO1.5]…

Linux热键,shell含义及权限介绍

君子忧道不忧贫。 —— 孔丘 Linux操作系统的权限 1、几个常用的热键介绍1、1、[Tab]键1、2、[ctrl]-c1、3、[ctrl]-d1、4、[ctrl]-r 2、shell命令以及运行原理3、权限3、1、什么是权限3、2、权限的本质3、3、Linux中的用户3、4、Linux中文件的权限3、4、1、快速掌握修改权限的…

华为HCIP Datacom H12-821 卷41

1.多选题 以下关于BGP Atomic_Aggregate和Aggregator的描述,正确的是哪些项? A、Aggregator属性属于可选过渡属性 B、Atomic_Aggregate属于公认任意属性 C、收到携带Atomic_Aggregate属性的路由表示这条路由不能再度明细化 D、 Agregator表示某条路由可能出现…

古玻璃制品的成分分析与鉴别详解【国一,附完整代码】

声明:2024年数模国赛即将来临,为助力国赛和钉钉杯,我将重温22年小样本国赛C题和23年大样本国赛C题,给出详细思路和完整代码,供广大数模爱好者阅览,如需比赛指导,请联系文章底部卡片咨询。 未经允…

UNiapp微信小程序Ucharts

效果图如下 以上为加载接口所得数据的玫瑰图与折线图 具体步骤如下 1,将插件导入Hbuiler 所需要的项目中(插件地址:秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场) 2,导入成功是这样的 3&#xff0c…

Windows终端远程登陆Linux服务器(SSH+VScode)

W i n d o w s 终端远程登陆 L i n u x 服务器( S S H V S c o d e ) \huge{Windows终端远程登陆Linux服务器(SSHVScode)} Windows终端远程登陆Linux服务器(SSHVScode) 文章目录 写在前面通过SSH远程连接L…

rust + python+ libtorch

1: 环境,ubuntu 1.1 rust : rust-1.79.0 (在官方下载linux版本后,解压文件夹,内部有个install的sh文件,可安装) 安装成功测试:cargo --version 1.2 python3.10 (直接使用apt install pytho…

Redis-基础概念

目录 概念 Redis是什么 Redis 和 MySQL 的区别? Redis单线程有什么极端场景的瓶颈 Redis为什么快? 为什么Redis是单线程? Redis是单线程还是多线程 Redis为什么选择单线程做核心处理 Redis6.0之后引入了多线程,你知道为什么吗? 瓶颈是内存和I…

SAP PP学习笔记28 - 生产订单的收货及品质管理

上一章讲了生产订单的很多概念,比如确认(报工)以及报工的各种形式,反冲,自动入库等。 SAP PP学习笔记27 - Confirmation(报工/确认)(CO11,CO11N,CO15,CO12),…

IOS系统有什么好用的藏语翻译软件推荐吗?

藏语翻译通是我使用过的比较好用实用的藏语翻译软件。 藏语翻译通是一款专为藏语和汉语互译设计的智能翻译软件,它利用最新的人工智能技术,为用户提供高效、准确的翻译服务。软件界面简洁直观,易于操作,无论是藏语学习者、研究者…

C++中的变量的同名隐藏

同名隐藏是C中的一个概念,在一个类的继承关系中,子类中定义了一个与父类中同名的成员函数。当这种情况发生时,子类中的函数会隐藏掉所有父类中同名的函数,这意味着在子类中调用这个函数时,会优先调用子类中定义的版本&…

图书馆定位导航:RFID、VR与AR技术在图书馆中的应用

图书馆作为知识的宝库,承载着无数求知者的梦想与期待,随着馆藏书籍数量的激增与图书馆布局的日益复杂,读者在寻找目标书籍往往有许多困难。传统的索引号查询方式虽能提供书籍的基本信息,但在寻找过程中,因不熟悉图书馆…

智慧博物馆的“眼睛”:视频智能监控技术守护文物安全与智能化管理

近日,位于四川德阳的三星堆博物馆迎来了参观热潮。据新闻报道,三星堆博物馆的日均参观量达1.5万人次。随着暑假旅游高峰期的到来,博物馆作为重要的文化场所,也迎来了大量游客。博物馆作为文化和历史的重要载体,其安全保…

JAVA零基础学习1(CMD、JDK、环境变量、变量和键盘键入、IDEA)

JAVA零基础学习1(CMD、JDK、环境变量、变量和键盘键入、IDEA) CMD常见命令配置环境变量JDK的下载和安装变量变量的声明和初始化声明变量初始化变量 变量的类型变量的作用域变量命名规则示例代码 键盘键入使用 Scanner 类读取输入步骤示例代码 常用方法处…

网络开局 与 Underlay网络自动化

由于出口和核心设备 部署在核心机房,地理位置集中,业务复杂,开局通常需要网络工程师进站调测。 因此核心层及核心以上的设备(包含核心层设备,旁挂独立AC设备和出口设备)推荐采用WEB网管开局方式或命令行开局方式。 核心以下的设备(包含汇聚层设备、接入层设备和AP)由于数量众…

【程序大侠传】服务发布引发mq消息重复消费

前序 在编程武侠世界中,有一个门派“天机楼”,连接并协调各大门派之间的关系,确保整个江湖的运作流畅无阻。天机楼住要的业务范围主要如下: 信息传递的信使: 天机楼就像是江湖中的飞鸽传书,确保各门派之间…

学生管理系统(C语言)(Easy-x)

课 程 报 告 课 程 名 称: 程序设计实践 专 业 班 级 : XXXXX XXXXX 学 生 姓 名 : XXX 学 号 : 231040700302 任 课 教 师 &a…

电瓶车检测AI算法:视频智能分析技术助力电瓶车规范与安全管理

随着电瓶车(电动自行车)的普及,其在城市交通中扮演着越来越重要的角色。然而,电瓶车的管理、安全监控以及维护等方面也面临着诸多挑战。近年来,人工智能(AI)技术的发展为解决这些问题提供了新的…