9.系统学习-卷积神经网络
9.系统学习-卷积神经网络
- 简介
- 输入层
- 卷积层
- 感受野
- 池化层
- 全连接层
- 代码实现
简介
卷积神经网络是一种用来处理局部和整体相关性的计算网络结构,被应用在图像识别、自然语言处理甚至是语音识别领域,因为图像数据具有显著的局部与整体关系,其在图像识别领域的应用获得了巨大的成功。卷积神经网络中,一般包含5种类型的网络层:
输入层
输入层(Input Layer)通常是输入卷积神经网络的原始数据或经过预处理的数据,可以是图像识别领域中原始三维的多彩图像,也可以是音频识别领域中经过傅里叶变换的二维波形数据,甚至是自然语言处理任务中一维表示的句子向量。
以图像分类任务为例,输入层输入的图像一般包含 RGB 三个通道,是一个由长宽分别为 H H H 和 W W W 组成的 3 维像素值矩阵 H × W × C H \times W \times C H×W×C,卷积网络会将输入层的数据传递到一系列卷积、池化等操作中进行特征提取和转化,最终由全连接层对特征进行汇总和结果输出。
根据计算能力、存储大小和模型结构的不同,卷积神经网络每次可以批量处理的图像个数不尽相同,若指定输入层接收到的图像个数为 N N N,则输入层的输出数据为:
N × C × H × W N \times C \times H \times W N×C×H×W
其中:
- N N N 是批量大小(Batch Size)。
- C C C 是通道数,例如 RGB 图像有 C = 3 C=3 C=3 个通道。
- H H H 和 W W W 分别是图像的高度和宽度。
卷积层
卷积层(Convolution Layer)通常用作对输入层输入数据进行特征提取,通过卷积核矩阵对原始数据中隐含关联性的一种抽象。卷积操作原理上其实是对两张像素矩阵进行点乘求和的数学操作,其中一个矩阵为输入的数据矩阵,另一个矩阵则为卷积核(滤波器或特征矩阵),求得的结果表示为原始图像中提取的特定局部特征。对应过程如下图所示:
卷积层中需要用到卷积核(滤波器或特征检测器)与图像特征矩阵进行点乘运算,利用卷积核与对应的特征感受域进行划窗式运算时,需要设定卷积核对应的大小、步长、个数以及填充的方式,
对应参数解释如表所示
卷积层有两个重要特性:局部连接 和 权值共享。
局部连接是指卷积层的节点仅仅和其前一层的部分节点相连接,只用来学习局部特征。局部感知结构的构思理念来源于动物视觉的皮层结构,其指的是动物视觉的神经元在感知外界物体的过程中起作用的只有一部分神经元。
在计算机视觉中,图像中的某一块区域中,像素之间的相关性与像素之间的距离同样相关,距离较近的像素间相关性强,距离较远则相关性就比较弱。由此可见,局部相关性理论也适用于计算机视觉的图像处理领域。因此,局部感知采用部分神经元接受图像信息,再通过综合全部的图像信息达到增强图像信息的目的。
权值共享是指计算同一深度的神经元时采用的卷积核参数是共享的。权值共享在一定程度上讲是有意义的,是由于在神经网络中,提取的底层边缘特征与其在图中的位置无关。但在某些场景中是无意的,例如在人脸识别任务中,我们期望在不同的位置学到不同的特征。
需要注意的是,权重只是对于同一深度切片的神经元是共享的。在卷积层中,通常采用多组卷积核提取不同的特征,即对应的是不同深度切片的特征,而不同深度切片的神经元权重是不共享的。相反,偏置这一权值对于同一深度切片的所有神经元都是共享的。
权值共享带来的好处是大大降低了网络的训练难度。假设在局部连接中隐藏层的每一个神经元连接的是一个 10 × 10 10 \times 10 10×10 的局部图像,因此有 10 × 10 10 \times 10 10×10 个权值参数。将这 10 × 10 10 \times 10 10×10 个权值共享给剩下的神经元,也就是说隐藏层中一个神经元的权值参数相同,那么此时无论隐藏层神经元的数量是多少,需要训练的参数就是这 10 × 10 10 \times 10 10×10 个权值参数(也就是卷积核的大小)。
感受野
在CONV层每个输出节点的值仅依赖CONV层输入的一个区域,这个区域之外的其他输入值都不会影响输出值,该区域就是感受野。
图中是个微型CNN,来自Inception‑v3论文,原图是为了说明一个conv5x5可以用两个conv3x3代替,从下到上称为第1 , 2 , 3层:
-
第 2 层左下角的值:是第 1 层左下红框中 3 × 3 3 \times 3 3×3 区域的值经过卷积,也就是乘加运算计算出来的。即第 2 层左下角位置的感受野是第 1 层左下红框区域。
-
第 3 层唯一值:是第 2 层所有 3 × 3 3 \times 3 3×3 区域卷积得到的,即第 3 层唯一位置的感受野是第 2 层所有 3 × 3 3 \times 3 3×3 区域。
-
第 3 层唯一值:是第 1 层所有 5 × 5 5 \times 5 5×5 区域经过两层卷积得到的,即第 3 层唯一位置的感受野是第 1 层所有 5 × 5 5 \times 5 5×5 区域。
感受野计算时需要注意以下几点:
-
最后一层(卷积层或池化层)输出特征图感受野的大小等于卷积核的大小。
-
第 i i i 层卷积层的感受野大小和第 ( i + 1 ) (i+1) (i+1) 层的卷积核大小和步长有关,同时也与第 ( i + 1 ) (i+1) (i+1) 层感受野大小有关。
-
计算感受野大小时忽略了图像边缘的影响,即不考虑 padding 的大小。
如果感受野大小使用的计算方式是采用从最后一层往下计算的方法,即先计算最深层在前一层上的感受野,然后逐层传递到第一层,使用的公式可以表示如下:
R F i = ( R F i + 1 − 1 ) × s t r i d e i + K s i z e i RF_i = (RF_{i+1} - 1) \times stride_i + Ksize_i RFi=(RFi+1−1)×stridei+Ksizei
其中, R F i RF_i RFi 是第 i i i 层卷积层的感受野, R F i + 1 RF_{i+1} RFi+1 是第 ( i + 1 ) (i+1) (i+1) 层上的感受野, s t r i d e stride stride 是卷积的步长, K s i z e Ksize Ksize 是本层卷积核大小。
如上图感受野的计算过程为:
R F 2 = 3 RF_2 = 3 RF2=3
R F 1 = ( 3 − 1 ) × 1 + 3 = 5 RF_1 = (3 - 1) \times 1 + 3 = 5 RF1=(3−1)×1+3=5
池化层
池化层又称为降采样层(Downsampling Layer),作用是对感受域内的特征进行筛选,提取区域内最具代表性的特征,能够有效地降低输出特征的尺寸,进而减少模型所需要的参数量。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它们分别提取感受域内最大、平均与总和的特征值作为输出。最常用的是最大池化。
全连接层
全连接层( Full Connected Layer )负责对卷积神经网络学习提取到的特征进行汇总,将多维的特征输入映射为二维的特征输出,高维表示样本批次,低位常常对应任务目标.
代码实现
import torch
from torch import nn
%matplotlib inline
class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Sequential( # input shape (1, 28, 28)nn.Conv2d(in_channels=1, # input heightout_channels=16, # n_filterskernel_size=5, # filter sizestride=1, # filter movement/steppadding=2, # padding to keep same width/height), # output shape (16, 28, 28)nn.ReLU(), # activationnn.MaxPool2d(kernel_size=2), # choose max value in 2x2 area, output shape (16, 14, 14))self.conv2 = nn.Sequential( # input shape (16, 14, 14)nn.Conv2d(16, 32, 5, 1, 2), # output shape (32, 14, 14)nn.ReLU(), # activationnn.MaxPool2d(2), # output shape (32, 7, 7))self.out = nn.Linear(32 * 7 * 7, 10) # fully connected layer, output 10 classesdef forward(self, x):x = self.conv1(x)x = self.conv2(x)x = x.view(x.size(0), -1) # flatten the output of conv2 to (batch_size, 32 * 7 * 7)output = self.out(x)return output
cnn = CNN()
print(cnn) # 网络结构
相关文章:

9.系统学习-卷积神经网络
9.系统学习-卷积神经网络 简介输入层卷积层感受野池化层全连接层代码实现 简介 卷积神经网络是一种用来处理局部和整体相关性的计算网络结构,被应用在图像识别、自然语言处理甚至是语音识别领域,因为图像数据具有显著的局部与整体关系,其在图…...

基于FPGA的出租车里程时间计费器
基于FPGA的出租车里程时间计费器 功能描述一、系统框图二、verilog代码里程增加模块时间增加模块计算价格模块上板视频演示 总结 功能描述 (1);里程计费功能:3公里以内起步价8元,超过3公里后每公里2元,其中…...

三甲医院等级评审八维数据分析应用(五)--数据集成与共享篇
一、引言 1.1 研究背景与意义 随着医疗卫生体制改革的不断深化以及信息技术的飞速发展,三甲医院评审作为衡量医院综合实力与服务水平的重要标准,对数据集成与共享提出了更为严苛的要求。在传统医疗模式下,医院内部各业务系统往往各自为政,形成诸多“信息孤岛”,使得数据…...

VUE条件树查询 自定义条件节点
之前实现过的简单的条件树功能如下图: 经过最新客户需求确认,上述条件树还需要再次改造,以满足正常需要! 最新暴改后的功能如下红框所示: 页面功能 主页面逻辑代码: <template><div class"…...
什么是打流,怎么用iperf3打流
什么是打流 在网络安全和黑灰产领域,“打流”具有不同的含义,常用于形容通过技术手段制造流量假象或发起流量攻击。 流量攻击(DDoS)中的“打流”: “打流”指向目标服务器或网络发起 大规模的数据请求,造…...
使用MySQL APT源在Linux上安装MySQL
全新安装MySQL的步骤 以下说明假定您的系统上尚未安装任何版本的MySQL(无论是由Oracle还是其他方分发) 添加MySQL的Apt源。 将MySQL的APT存储库添加到系统的软件存储库列表中。 1、转到MySQL APT存储库的下载页面MySQL :: Download MySQL APT Reposi…...

redux react-redux @reduxjs/toolkit
redux团队先后推出了redux、react-redux、reduxjs/toolkit,这三个库的api各有不同。本篇文章就来梳理一下当我们需要在项目中集成redux,从直接使用redux,到使用react-redux,再到react-redux和reduxjs/toolkit配合使用,…...

【偏好对齐】通过ORM直接推导出PRM
论文地址:https://arxiv.org/pdf/2412.01981 相关博客 【自然语言处理】【大模型】 ΨPO:一个理解人类偏好学习的统一理论框架 【强化学习】PPO:近端策略优化算法 【偏好对齐】PRM应该奖励单个步骤的正确性吗? 【偏好对齐】通过OR…...
Python与其他编程语言的区别是什么?
Python是一种广泛使用的高级编程语言,以其简洁的语法、强大的库支持和广泛的应用领域而著称。与其他编程语言相比,Python具有许多独特的特点和优势。以下将从多个方面详细探讨Python与其他编程语言的区别,并通过示例进行说明。 一、语法简洁…...

cuda11.6和对应的cudnn(windows)
因为每次不同的torch版本要下对应的cuda,这次刚好在Windows上下好了一个cuda11.6和对应的cudnn,直接放到网盘中,大家有需要对应版本的可以直接下载: 链接:https://pan.quark.cn/s/f153a53830d4 大家自取,c…...

24年无人机行业资讯 | 12.23-12.29
24年无人机行业资讯 | 12.23-12.29 1、 国家发改委新设低空经济司,助力低空经济规范发展2、商务部支持无人机民用国际贸易,强调出口管制与安全并重3、滨州高新区首架无人机成功下线4、 2025第九届世界无人机大会筹备推进会顺利召开5、2024年世界无人机竞…...

uniapp:微信小程序文本长按无法出现复制菜单
一、问题描述 在集成腾讯TUI后,为了能让聊天文本可以复制,对消息组件的样式进行修改,主要是移除下面的user-select属性限制: user-select: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms…...

qml Item详解
1、概述 Item是QML(Qt Modeling Language)的基础元素,所有其他可视化元素都继承自它。它代表了一个可视化的对象,虽然Item对象本身没有可视外观,但它定义了所有可视项之间通用的属性,比如位置、大小、旋转…...
【Java回顾】Day4 反射机制
反射机制 之前学过一部分,笔记在20250103Java包_网络编程.md里,这里在之前的笔记的基础上做一些补充。 反射:得到class对象后反向获取对象的各种信息。 包 Field 类或接口中的字段(成员变量),动态访问和修改类的字段 模板 获取Class 对象 …...

【沉默的羔羊心理学】汉尼拔的“移情”游戏:操纵与理解的艺术,精神分析学视角下的角色互动
终极解读《沉默的羔羊》:弗洛伊德精神分析学视角下的深层剖析 关键词 沉默的羔羊弗洛伊德精神分析学角色心理意识与潜意识性别与身份 弗洛伊德精神分析学简介 弗洛伊德的精神分析学是心理学的一个重要分支,主要关注人类行为背后的无意识动机和冲突。…...

[深度学习] 大模型学习1-大语言模型基础知识
大语言模型(Large Language Model,LLM)是一类基于Transformer架构的深度学习模型,主要用于处理与自然语言相关的各种任务。简单来说,当用户输入文本时,模型会生成相应的回复或结果。它能够完成许多任务&…...
如何解决数据库和缓存不一致的问题
目录 一、Cache-Aside模式(旁路缓存模式) 二、Write-Through模式(写透缓存模式) 三、Write-Behind模式(写回缓存模式) 四、先删除缓存再更新数据库(不推荐,存在风险)…...

剑指Offer|LCR 021. 删除链表的倒数第 N 个结点
LCR 021. 删除链表的倒数第 N 个结点 给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1…...

【NX入门篇】
NX入门篇 一、UG NX 由来二、软件如何启动(UG NX 12.0)三、使用步骤四、常用命令 一、UG NX 由来 UG NX由来: 1969 年:UG 的开发始于美国麦道航空公司,基于 C 语言开发实现;1976 年:UG问世&am…...

ubuntu如何禁用 Snap 更新
.禁用 Snap 更新(通过修改 snapd 配置) 打开并编辑 /etc/apt/apt.conf.d/50unattended-upgrades文件。 这个文件控制自动更新的行为。 sudo vim /etc/apt/apt.conf.d/50unattended-upgrades 里面有一行将里面的auto改为false即可禁用更新:…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...