pytorch学习——卷积神经网络——以LeNet为例

目录

一.什么是卷积?

二.卷积神经网络的组成

三.卷积网络基本元素介绍

3.1卷积

3.2填充和步幅

3.2.1填充(Padding)

        填充是指在输入数据周围添加额外的边界值(通常是零),以扩展输入的尺寸。填充可以在卷积操作中起到两个主要的作用:

3.2.2步幅(Stride)

 3.3多输入通道

3.4池化层 

 四.LeNet


一.什么是卷积?

        当我们谈论"卷积"时,通常指的是数学中的卷积运算。在卷积神经网络中,卷积操作是一种数学运算,用于处理图像和其他具有网格结构的数据。

        可以将卷积操作想象为两个函数之间的一种运算。首先,我们有一个输入函数(比如图像),它表示为一个矩阵或张量。然后,我们有另一个函数(称为卷积核或滤波器),它也是一个矩阵或张量。

        卷积操作的核心思想是将卷积核与输入函数的局部区域进行逐元素的乘法,并将乘积结果相加,从而得到输出函数的对应位置的值。这个过程可以通过滑动卷积核的方式在输入函数上进行。具体来说,卷积核从输入函数的左上角开始,按照一定的步长(stride)在输入函数上滑动,每次都与输入函数的一个局部区域进行逐元素的乘法并求和,得到输出函数的一个元素。

 实现示例中的卷积运算:

import torch
from torch import nn
from d2l import torch as d2ldef corr2d(X, K):  #@save"""计算二维互相关运算"""h, w = K.shapeY = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))for i in range(Y.shape[0]):for j in range(Y.shape[1]):Y[i, j] = (X[i:i + h, j:j + w] * K).sum()return Y
X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
K = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
corr2d(X, K)#结果
tensor([[19., 25.],[37., 43.]])

        通过卷积操作,我们可以提取输入函数中的特征。卷积核中的权重决定了它对输入函数的不同局部模式的响应程度。例如,在图像处理中,卷积核可以检测边缘、纹理和其他图像特征。通过在网络中学习这些卷积核的权重,网络可以自动发现和提取图像中的有用特征。

推荐博客:CNN笔记:通俗理解卷积神经网络_cnn卷积神经网络_v_JULY_v的博客-CSDN博客

二.卷积神经网络的组成

        一个完整的卷积神经网络(Convolutional Neural Network,CNN)通常由以下几个主要组件组成:

  1. 输入层(Input Layer):接收原始输入数据(例如图像)的层。输入层的尺寸和通道数与输入数据的特征维度相对应。

  2. 卷积层(Convolutional Layer):卷积层是CNN的核心组件。它由一系列卷积核(滤波器)组成,每个卷积核负责检测输入特征中的某种局部模式。卷积层通过卷积操作提取输入数据的特征,并生成一系列特征图。

  3. 激活函数层(Activation Layer):在卷积层后面通常会应用激活函数,如ReLU(修正线性单元),以引入非线性特性。激活函数层对每个特征图上的每个元素进行逐元素的非线性变换。

  4. 池化层(Pooling Layer):池化层用于减小特征图的空间尺寸,并保留重要的特征。常见的池化操作包括最大池化和平均池化,通过降低空间分辨率来减少参数数量和计算量。

  5. 全连接层(Fully Connected Layer):全连接层将前面的卷积层和池化层的输出转换为分类或回归所需的向量形式。每个神经元与上一层的所有神经元相连接,通过学习权重和偏置来进行特征组合和分类。

  6. 输出层(Output Layer):输出层根据具体任务的需求确定,可以是用于分类的softmax层,用于回归的线性层,或者其他适当的激活函数层。

除了上述主要组件之外,卷积神经网络还可能包含其他一些辅助层或技术:

  • 批归一化层(Batch Normalization Layer):用于在网络的训练过程中对每个小批量样本进行归一化,加速收敛并提高鲁棒性。
  • Dropout层:通过随机将一部分神经元的输出置零来减少过拟合。
  • 损失函数(Loss Function):用于衡量网络输出与真实标签之间的差异,根据具体任务选择适当的损失函数。
  • 优化器(Optimizer):用于更新网络中的权重和偏置,以最小化损失函数。常见的优化算法包括随机梯度下降(SGD)、Adam、RMSProp等。

        这些组件和技术的组合形成了一个完整的卷积神经网络,能够对输入数据进行特征提取、分类、回归等任务,并在训练过程中通过反向传播算法进行参数优化。网络的具体架构和层数可以根据任务的复杂性和数据集的特点进行设计和调整。

三.卷积网络基本元素介绍

3.1卷积

见上

3.2填充和步幅

3.2.1填充(Padding)

        填充是指在输入数据周围添加额外的边界值(通常是零),以扩展输入的尺寸。填充可以在卷积操作中起到两个主要的作用:

  • 保持特征图尺寸:卷积操作会导致特征图尺寸减小,通过填充可以控制特征图的大小,使其与输入大小相匹配。这对于在网络层之间传递信息和保持空间分辨率很重要。
  • 边缘信息保留:填充可以防止边缘信息的丢失。在没有填充的情况下,边缘像素只能通过较少的卷积操作进行处理,导致边缘信息在特征图中逐渐减少。通过填充,可以保留更多的边缘信息。

3.2.2步幅(Stride)

        步幅是指卷积核在输入数据上滑动的步长。通常,步幅的值是正整数。较大的步幅会导致特征图尺寸减小,因为卷积核在输入上移动的距离增加了。步幅的作用主要体现在两个方面:

  • 特征图尺寸控制:通过调整步幅的大小,可以控制特征图的尺寸。较大的步幅可以减小特征图的尺寸,而较小的步幅可以保持更多的空间信息。
  • 特征提取的多尺度:较大的步幅可以在输入数据的不同位置上进行特征提取,从而捕捉到不同尺度的特征。这对于处理具有不同大小目标的图像很有用。

 3.3多输入通道

        当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。

        下图中演示了一个具有两个输入通道的二维互相关运算的示例。阴影部分是第一个输出元素以及用于计算这个输出的输入和核张量元素:(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56。

 参考:6.4. 多输入多输出通道 — 动手学深度学习 2.0.0 documentation

3.4池化层 

        与卷积层类似,池化层运算符由一个固定形状的窗口组成,该窗口根据其步幅大小在输入的所有区域上滑动,为固定形状窗口(有时称为汇聚窗口)遍历的每个位置计算一个输出。 然而,不同于卷积层中的输入与卷积核之间的互相关计算,池化层不包含参数。 相反,池运算是确定性的,我们通常计算汇聚窗口中所有元素的最大值或平均值。这些操作分别称为最大池化层(maximum pooling)和平均池化层(average pooling)。

 

 

 四.LeNet

        LeNet——最早的卷积神经网络,总体来看,LeNet(LeNet-5)由两个部分组成:

  • 卷积编码器:由两个卷积层组成;

  • 全连接层密集块:由三个全连接层组成。

 LeNet架构图:

        每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均汇聚层。请注意,虽然ReLU和最大汇聚层更有效,但它们在20世纪90年代还没有出现。每个卷积层使用5×5卷积核和一个sigmoid激活函数。这些层将输入映射到多个二维特征输出,通常同时增加通道的数量。第一卷积层有6个输出通道,而第二个卷积层有16个输出通道。每个2×2池操作(步幅2)通过空间下采样将维数减少4倍。卷积的输出形状由批量大小、通道数、高度、宽度决定。

        为了将卷积块的输出传递给稠密块,我们必须在小批量中展平每个样本。换言之,我们将这个四维输入转换成全连接层所期望的二维输入。这里的二维表示的第一个维度索引小批量中的样本,第二个维度给出每个样本的平面向量表示。LeNet的稠密块有三个全连接层,分别有120、84和10个输出。因为我们在执行分类任务,所以输出层的10维对应于最后输出结果的数量。

import torch
from torch import nn
from d2l import torch as d2l# 定义卷积神经网络
net = nn.Sequential(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(),  # 第二层卷积层nn.AvgPool2d(kernel_size=2, stride=2),  # 第二层池化层nn.Flatten(),  # 展平操作,将多维输入转换为一维向量nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),  # 全连接层1nn.Linear(120, 84), nn.Sigmoid(),  # 全连接层2nn.Linear(84, 10)  # 输出层,输出类别的数量为10
)

 以下是一段检查神经网络每个层形状的代码,可用于快速纠错

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)
#结果
Conv2d output shape:         torch.Size([1, 6, 28, 28])
Sigmoid output shape:        torch.Size([1, 6, 28, 28])
AvgPool2d output shape:      torch.Size([1, 6, 14, 14])
Conv2d output shape:         torch.Size([1, 16, 10, 10])
Sigmoid output shape:        torch.Size([1, 16, 10, 10])
AvgPool2d output shape:      torch.Size([1, 16, 5, 5])
Flatten output shape:        torch.Size([1, 400])
Linear output shape:         torch.Size([1, 120])
Sigmoid output shape:        torch.Size([1, 120])
Linear output shape:         torch.Size([1, 84])
Sigmoid output shape:        torch.Size([1, 84])
Linear output shape:         torch.Size([1, 10])

具体代码实现:6.6. 卷积神经网络(LeNet) — 动手学深度学习 2.0.0 documentation

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

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

相关文章

生鲜蔬果小程序的完整教程

随着互联网的发展,线上商城成为了人们购物的重要渠道。其中,小程序商城在近年来的发展中,备受关注和青睐。本文将介绍如何使用乔拓云网后台搭建生鲜果蔬配送小程序,并快速上线。 首先,登录乔拓云网后台,进入…

C#+WPF上位机开发(模块化+反应式)

在上位机开发领域中,C#与C两种语言是应用最多的两种开发语言,在C语言中,与之搭配的前端框架通常以QT最为常用,而C#语言中,与之搭配的前端框架是Winform和WPF两种框架。今天我们主要讨论一下C#和WPF这一对组合在上位机开…

无人机巢的作用及应用领域解析

无人机巢作为无人机领域的创新设备,不仅可以实现无人机的自主充电和电池交换,还为无人机提供安全便捷的存放空间。为了帮助大家更好地了解无人机巢,本文将着重解析无人机巢的作用和应用领域。 一、无人机巢的作用 无人机巢作为无人机技术的重…

【RabbitMQ】golang客户端教程2——工作队列

任务队列/工作队列 在上一个教程中,我们编写程序从命名的队列发送和接收消息。在这一节中,我们将创建一个工作队列,该队列将用于在多个工人之间分配耗时的任务。 工作队列(又称任务队列)的主要思想是避免立即执行某些…

opencv-38 形态学操作-闭运算(先膨胀,后腐蚀)cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

闭运算是先膨胀、后腐蚀的运算,它有助于关闭前景物体内部的小孔,或去除物体上的小黑点,还可以将不同的前景图像进行连接。 例如,在图 8-17 中,通过先膨胀后腐蚀的闭运算去除了原始图像内部的小孔(内部闭合的…

案例实践:小红书APP出现闪退问题,接口测试怎么做?(二)

Postman实现接口功能测试 新增货品接口实战 1、填写接口请求4要素: 由于货品新增接口文档找不到接口请求4要素中的:请求方法、请求地址和请求头,故,使用Fiddler抓包获取,获取结果如下: 1)请求…

Zebec APP:构建全面、广泛的流支付应用体系

目前,流支付协议 Zebec Protocol 基本明确了生态的整体轮廓,它包括由其社区推动的模块化 Layer3 构架的公链 Nautilus Chain、流支付应用 Zebec APP 以及 流支付薪酬工具 Zebec payroll 。其中,Zebec APP 是原有 Zebec Protocol 的主要部分&a…

【逗老师的PMP学习笔记】4、项目整合管理

目录 一、制定项目章程1、制定项目章程的整体输入、输出和工具技术2、输入2.1、输入-商业文件2.2、输入-协议2.3、输入-事业环境因素组织过程资产 3、工具与技术3.1、专家判断3.2、数据收集3.3、人际关系与团队技能3.4、会议 4、输出4.1、输出-项目章程4.2、输出-假设日志 二、…

61 # http 数据处理

node 中的核心模块 http 可以快速的创建一个 web 服务 const http require("http"); const url require("url");// req > request 客户端的所有信息 // res > respone 可以给客户端写入数据 const server http.createServer();server.on("r…

【前端知识】React 基础巩固(四十二)——React Hooks的介绍

React 基础巩固(四十二)——React Hooks的介绍 一、为什么需要Hook? Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期)。 class组件 VS 函数式组件: class的优势…

让Python点亮你的世界:打造专业级编程环境的必备步骤

文章目录 初识pythonpython的安装win系统Linux系统(centos7) 第一个Python程序常见问题 Python解释器Python开发环境PyCharm的基础使用创建项目修改主题修改默认字体和大小汉化插件翻译软件常用快捷键 初识python Python语言的起源可以追溯到1989年&…

基于ARM+FPGA的驱控一体机器人控制器设计

目前市场上工业机器人,数控机床等多轴运动控制系统普遍采用运动控制器加 伺服驱动器的分布式控制方式。在这种控制方式中,控制器一方面完成人机交互,另 一方面进行 NC 代码的解释执行,插补运算,继而将计算出来的位…

jmeter之接口测试(http接口测试)

基础知识储备 一、了解jmeter接口测试请求接口的原理 客户端--发送一个请求动作--服务器响应--返回客户端 客户端--发送一个请求动作--jmeter代理服务器---服务器--jmeter代理服务器--服务器 二、了解基础接口知识: 1、什么是接口:前端与后台之间的…

云计算——常见集群策略

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 一.什么是集群 二.集群策略 1.虚拟机HA 实现虚拟机高可用性通常涉及以下关键…

【Java基础教程】(五十)JDBC篇:JDBC概念及操作步骤、主要类与接口解析、批处理与事务处理~

Java基础教程之JDBC 🔹本章学习目标1️⃣ JDBC概念2️⃣ 连接数据库3️⃣ Statement 接口3.1 数据更新操作3.2 数据查询 4️⃣ PreparedStatement 接口4.1 Statement 接口问题4.2 PreparedStatement操作 5️⃣ 批处理与事务处理🌾 总结 🔹本…

高性能网络框架笔记

目录 TCP粘包、分包惊群断开连接,TCP怎么检测的?大量的close wait,如何解 ?双方同时调用close水平触发和边沿触发的区别 TCP粘包、分包 解决:1.应用层协议头前面pktlen;2.为每一个包加上分隔符;(\r\n&…

Java 版 spring cloud + spring boot 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…

经典CNN(三):DenseNet算法实战与解析

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊|接辅导、项目定制 1 前言 在计算机视觉领域,卷积神经网络(CNN)已经成为最主流的方法,比如GoogleNet,…

【多模态】ALBEF-融合前对齐

目录 🍁🍁背景 🌷🌷网络结构 🎅🎅损失函数 🌼🌼动量蒸馏 🌺🌺下游任务结果 📒📒Grad-CAM 特征可视化 🚦&#x1f6a…

欧拉函数与筛法求欧拉函数

目录 欧拉函数欧拉函数的定义欧拉函数的公式欧拉函数的公式推导欧拉定理典型例题代码实现 筛法求欧拉函数思路分析经典例题代码实现 欧拉函数 欧拉函数的定义 对于任意正整数 n n n,欧拉函数 φ ( n ) φ(n) φ(n) 表示小于或等于 n n n 的正整数中,与 n n n …