卷积详解和并行卷积

ps:在 TensorFlow Keras 中,构建 Sequential 模型的正确方式是将层作为列表传递,而不是作为一系列单独的参数。
model=models.Sequential([layers,layers])
而不是model=models.Sequential(layers,layers)

文章目录

  • 卷积操作及其计算过程的详细解释
    • 卷积的基本操作
      • 1. 卷积核(Convolution Kernel)
        • 卷积核如何提取特征
      • 2. 卷积过程
        • 卷积的数学表示
        • 简单例子
        • 输出尺寸的计算
      • 3.卷积矩阵在深度训练中的改变过程
        • 卷积核的调整过程
          • 1. 初始化
          • 2. 前向传播
          • 3. 反向传播和卷积核的更新
          • 4. 迭代过程
        • 卷积核的角色
  • 并行卷积结构和深度可分离卷积的详细数学解释
    • 并行卷积结构:Inception 模块
      • 概念
      • 数学表示
      • 简单例子
        • 输出尺寸的计算
        • 为什么不同的卷积大小产生相同的尺寸输出
      • 代码

卷积操作及其计算过程的详细解释

卷积是深度学习中用于图像和信号处理的一种基本数学操作。它通过应用卷积核(或过滤器)到输入数据上,来提取重要特征。

卷积的基本操作

1. 卷积核(Convolution Kernel)

  • 卷积核是一个小的矩阵(通常是2D),用于通过滤过输入数据来提取特定特征。
卷积核如何提取特征
  • 边缘检测:例如,卷积核 K = [ − 1 0 1 − 1 0 1 − 1 0 1 ] K = \begin{bmatrix}-1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1\end{bmatrix} K= 111000111 被用于边缘检测。这个特定的卷积核可以突出水平方向的边缘。它通过计算左侧像素与右侧像素的差异来工作,这种差异在边缘处最大。

  • 纹理和模式识别:不同的卷积核可以识别不同的纹理和模式。例如,对于识别特定方向的纹理,卷积核会有特定的方向性。

在实际应用中,通常不是手动设计这些卷积核,而是通过训练过程让神经网络自行学习最优的卷积核,以适应特定的任务和数据。

2. 卷积过程

  • 将卷积核放在输入数据的左上角。
  • 将卷积核的每个元素与其覆盖的输入数据元素相乘,然后将结果求和,得到输出特征图的一个元素。
  • 将卷积核向右滑动一个步长(Stride),重复上述过程,直到覆盖整个输入数据。
卷积的数学表示

卷积操作可以表示为:

S ( i , j ) = ( I ∗ K ) ( i , j ) = ∑ m ∑ n I ( m , n ) K ( i − m , j − n ) S(i, j) = (I \ast K)(i, j) = \sum_m \sum_n I(m, n) K(i-m, j-n) S(i,j)=(IK)(i,j)=mnI(m,n)K(im,jn)

其中, I I I 是输入图像, K K K 是卷积核, S S S 是输出特征图, i i i j j j 表示特征图上的位置。

  • 以一个 3 × 3 3 \times 3 3×3 的卷积核为例,应用于一个二维输入数据(如图像):

    S ( i , j ) = ∑ m = 0 2 ∑ n = 0 2 I ( i + m , j + n ) K ( m , n ) S(i, j) = \sum_{m=0}^{2} \sum_{n=0}^{2} I(i+m, j+n) K(m, n) S(i,j)=m=02n=02I(i+m,j+n)K(m,n)

    其中 I I I 是输入数据, K K K 是卷积核, S S S 是输出特征图, i i i j j j 是特征图上的位置。

简单例子

假设输入数据是一个 4 × 4 4 \times 4 4×4 的矩阵,卷积核是一个 3 × 3 3 \times 3 3×3 的矩阵,如下所示:
输入数据 I:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

卷积核 K:
-1 0 1
-1 0 1
-1 0 1

  • 将卷积核放在输入数据的左上角,计算卷积(不考虑步长和填充):

S(0, 0) = (1*-1 + 20 + 31) + (5*-1 + 60 + 71) + (9*-1 + 100 + 111)
= -1 + 0 + 3 - 5 + 0 + 7 - 9 + 0 + 11
= 7

  • 将卷积核向右滑动一个步长,并重复计算。
输出尺寸的计算

输出尺寸取决于输入尺寸、卷积核尺寸、步长和填充:

Output Size = Input Size − Filter Size + 2 × Padding Stride + 1 \text{Output Size} = \frac{\text{Input Size} - \text{Filter Size} + 2 \times \text{Padding}}{\text{Stride}} + 1 Output Size=StrideInput SizeFilter Size+2×Padding+1

在不使用填充且步长为1的情况下,上述例子中的输出尺寸将是 2 × 2 2 \times 2 2×2

3.卷积矩阵在深度训练中的改变过程

在深度学习中,卷积矩阵(或称为卷积核、过滤器)是通过训练过程逐渐调整以优化特征提取的。这个调整过程是通过反向传播算法和梯度下降方法实现的。

卷积核的调整过程
1. 初始化
  • 初始化:开始训练时,卷积核的权重通常被初始化为随机小数值。
2. 前向传播
  • 提取特征:在训练过程中,卷积核在前向传播阶段通过卷积操作提取输入数据的特征。
    前向传播是数据通过神经网络的过程,其中的每一步如下:
    1. 数据输入:原始数据输入网络。
    2. 卷积操作:数据通过卷积层,卷积核应用于数据。
    3. 激活函数:卷积的结果通过激活函数,如ReLU。
    4. 池化:可选步骤,应用池化(如最大池化)降低维度。
    5. 输出生成:通过全连接层生成最终输出。
3. 反向传播和卷积核的更新

卷积核的更新发生在反向传播过程中,该过程如下:

  1. 损失计算:计算预测输出和实际输出之间的差异(损失)。
  • 损失函数衡量模型预测与实际标签之间的差距。常用的损失函数包括均方误差(MSE)和交叉熵损失。

  • 假设有实际值 y y y 和预测值 y ^ \hat{y} y^,MSE 计算公式为:

    MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2

    其中 n n n 是样本数量。

  1. 梯度计算:通过反向传播算法计算损失函数相对于卷积核权重的梯度。
  • 对于每个权重 W W W,损失函数的梯度计算为:

    ∂ Loss ∂ W = ∂ Loss ∂ y ^ × ∂ y ^ ∂ W \frac{\partial \text{Loss}}{\partial W} = \frac{\partial \text{Loss}}{\partial \hat{y}} \times \frac{\partial \hat{y}}{\partial W} WLoss=y^Loss×Wy^

  1. 权重更新:根据梯度和学习率更新卷积核的权重。更新公式为:

W new = W old − η × ∂ Loss ∂ W W_{\text{new}} = W_{\text{old}} - \eta \times \frac{\partial \text{Loss}}{\partial W} Wnew=Woldη×WLoss

其中 W W W 是卷积核权重, η \eta η 是学习率, ∂ Loss ∂ W \frac{\partial \text{Loss}}{\partial W} WLoss 是损失函数相对于 W W W 的梯度。

示例:单层神经网络

  • 假设有一个单层网络,输出 y ^ = W x + b \hat{y} = Wx + b y^=Wx+b,损失函数是 MSE。

  • 损失对 W W W 的梯度为:

    ∂ Loss ∂ W = 2 n ∑ ( y − y ^ ) × ( − x ) \frac{\partial \text{Loss}}{\partial W} = \frac{2}{n} \sum (y - \hat{y}) \times (-x) WLoss=n2(yy^)×(x)

  • 在反向传播中,这个梯度用于更新 W W W

4. 迭代过程
  • 重复迭代:这个过程在多个训练周期(epoch)中重复进行,直到模型性能达到预定的标准或者停止改进。
卷积核的角色
  • 在训练过程中,卷积核逐渐学习到如何有效地提取输入数据的关键特征,这些特征对于完成特定的深度学习任务(如图像分类、物体检测等)至关重要。

并行卷积结构和深度可分离卷积的详细数学解释

并行卷积结构:Inception 模块

概念

  • Inception 模块是一种在同一网络层上并行应用多种不同尺寸卷积核的结构。
  • 它允许网络在单一层级上捕获多尺度特征。

数学表示

假设输入特征图为 X X X,Inception 模块中的不同分支可以表示如下:

  1. 1 × 1 1 \times 1 1×1 卷积分支
    Y 1 = Conv 1 × 1 ( X ) Y_1 = \text{Conv}_{1 \times 1}(X) Y1=Conv1×1(X)
    这里, Conv 1 × 1 \text{Conv}_{1 \times 1} Conv1×1 表示 1 × 1 1 \times 1 1×1 卷积,用于捕获局部特征。

  2. 3 × 3 3 \times 3 3×3 卷积分支
    Y 2 = Conv 3 × 3 ( X ) Y_2 = \text{Conv}_{3 \times 3}(X) Y2=Conv3×3(X)
    3 × 3 3 \times 3 3×3 卷积能捕获更广泛的空间特征。

  3. 5 × 5 5 \times 5 5×5 卷积分支
    Y 3 = Conv 5 × 5 ( X ) Y_3 = \text{Conv}_{5 \times 5}(X) Y3=Conv5×5(X)
    5 × 5 5 \times 5 5×5 卷积提供了更大范围的感受野。

这些分支的输出被沿深度方向合并,生成综合特征映射 Y Y Y
Y = [ Y 1 , Y 2 , Y 3 ] Y = [Y_1, Y_2, Y_3] Y=[Y1,Y2,Y3]

简单例子

考虑一个 224 × 224 × 3 224 \times 224 \times 3 224×224×3 的图像作为输入 X X X。Inception 模块中的 1 × 1 1 \times 1 1×1 卷积可能产生 224 × 224 × 64 224 \times 224 \times 64 224×224×64 的输出 Y 1 Y_1 Y1 3 × 3 3 \times 3 3×3 卷积产生相同尺寸的输出 Y 2 Y_2 Y2,而 5 × 5 5 \times 5 5×5 卷积也产生相同尺寸的输出 Y 3 Y_3 Y3。合并这些输出,我们得到一个 224 × 224 × 192 224 \times 224 \times 192 224×224×192 的特征映射 Y Y Y

输出尺寸的计算

输出特征图的尺寸取决于几个因素:

  • 输入尺寸:输入图像的尺寸。
  • 卷积核尺寸:卷积核的大小。
  • 步长(Stride):卷积核在输入上滑动的步长。
  • 填充(Padding):在输入周围添加的零的层数。

输出尺寸的计算公式为:

Output Size = Input Size − Filter Size + 2 × Padding Stride + 1 \text{Output Size} = \frac{\text{Input Size} - \text{Filter Size} + 2 \times \text{Padding}}{\text{Stride}} + 1 Output Size=StrideInput SizeFilter Size+2×Padding+1

为什么不同的卷积大小产生相同的尺寸输出

在前面的例子中, 1 × 1 1 \times 1 1×1 3 × 3 3 \times 3 3×3 5 × 5 5 \times 5 5×5 的卷积产生了相同尺寸的输出,这是因为:

  1. 步长和填充的调整:通过调整步长和填充,可以使不同大小的卷积核产生相同尺寸的输出。通常,较大的卷积核会使用更多的填充来保持输出尺寸不变。

  2. 保持特征图空间分辨率:这种做法使得并行的卷积分支可以在深度方向上直接合并,因为它们具有相同的空间维度。

所以假设输入尺寸为 224 × 224 224 \times 224 224×224,卷积核尺寸分别为 1 × 1 1 \times 1 1×1 3 × 3 3 \times 3 3×3 5 × 5 5 \times 5 5×5,步长为 1,并且对于 3 × 3 3 \times 3 3×3 5 × 5 5 \times 5 5×5 卷积使用适当的填充(分别为 1 和 2)来保持输出尺寸不变。根据上述公式,所有这些卷积操作将产生 224 × 224 224 \times 224 224×224 的输出特征图。

代码

import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D, Concatenate
from tensorflow.keras.models import Model# 定义一个函数来创建并行卷积层
def parallel_convolution(input_tensor):# 1x1 卷积conv_1x1 = Conv2D(filters=64, kernel_size=(1, 1), padding='same', activation='relu')(input_tensor)# 3x3 卷积conv_3x3 = Conv2D(filters=64, kernel_size=(3, 3), padding='same', activation='relu')(input_tensor)# 5x5 卷积conv_5x5 = Conv2D(filters=64, kernel_size=(5, 5), padding='same', activation='relu')(input_tensor)# 合并不同尺寸卷积的结果output = Concatenate()([conv_1x1, conv_3x3, conv_5x5])return output# 输入层
input_layer = Input(shape=(224, 224, 3))# 应用并行卷积层
output_layer = parallel_convolution(input_layer)# 创建模型
model = Model(inputs=input_layer, outputs=output_layer)# 查看模型概况
model.summary()

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

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

相关文章

Redis 基础—Redis Desktop Manager(Redis可视化工具)安装及使用教程

Redis Desktop Manager 是一个可视化的 Redis 数据库管理工具,可以方便地查看和操作 Redis 数据库。使用 Redis Desktop Manager 可以大大提高 Redis 数据库的管理效率。 RDM的安装和配置 首先,您需要下载和安装Redis Desktop Manager。 安装完成后&am…

Python 小红书评论区采集 小红薯xhs精准用户获客

成品图 评论接口https://edith.xiaohongshu.com/api/sns/web/v2/comment/page?note_id笔记id&cursor光标 初次使用cursor为空,该接口为GET,需要x-s,x-t签名验证 子评论接口https://edith.xiaohongshu.com/api/sns/web/v2/comment/sub/page?note_id%s&r…

python爬取robomaster论坛文章数据,携带登录信息

一. 内容简介 python爬取robomaster论坛文章数据。 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 三.主要流程 3.1 接口分析,以及网页结构分析 # 这是文章链接,其实id就是文章的id # https://bbs.robomaster.com/forum.php?modview…

win系统一台电脑安装两个不同版本的mysql教程

文章目录 1.mysql下载zip包(地址)2.解压在你的电脑上(不要再C盘和带中文的路径)3.创建my.ini文件4.更改环境变量(方便使用, 可选)5.打包mysql服务6.初始化mysql的data7.启动刚刚打包的服务8.更改密码 1.mys…

CentOS常用基础命令大全(linux命令)2

CentOS常用基础命令大全(linux命令) 1.关机 (系统的关机、重启以及登出 ) 的命令 shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0 关闭系统(3) shutdown -h hours:minutes & 按预定时间关闭系统 shutdown -c 取消按预定时间关闭系统 sh…

【无标将列表中的多组参数依次带入指定的函数将每次调用函数返回结果组成列表itertools.starmap()题】

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将列表中的多组参数 依次带入指定的函数 将每次调用函数 返回结果组成列表 itertools.starmap() [太阳]选择题 请问以下代码输出的结果是? import itertools a [(1, 2), (3, 4)] p…

基于JAVA+SpringBoot+Vue的前后端分离的医院信息智能化HIS系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着科技的不断发展&a…

解决Ubuntu16.04没声音

第一步:安装 PulseAudio Volum Control Ubuntu没有声音(听不到声音)的解决方法 第二步:No cards available for configuration 【解决Ubuntu18.04没声音:No cards available for configuration】 完美解决&#xf…

【WPF.NET开发】WPF中的对话框

目录 1、消息框 2、通用对话框 3、自定义对话框 实现对话框 4、打开对话框的 UI 元素 4.1 菜单项 4.2 按钮 5、返回结果 5.1 模式对话框 5.2 处理响应 5.3 非模式对话框 Windows Presentation Foundation (WPF) 为你提供了自行设计对话框的方法。 对话框是窗口&…

浙政钉SDK安装

专有订单SDK&#xff08;jar包&#xff09;下载 专有钉钉门户 (dg-work.cn) Maven依赖 浙政钉 <!-- 浙政钉 --> <dependency><groupId>com.oracel</groupId><artifactId>zwdd-sdk-java</artifactId><version>1.2.0</version…

概率密度函数(PDF)正态分布

概率密度函数&#xff08;PDF&#xff09;是一个描述连续随机变量取特定值的相对可能性的函数。对于正态分布的情况&#xff0c;其PDF有一个特定的形式&#xff0c;这个形式中包括了一个常数乘以一个指数函数&#xff0c;它假设误差项服从均值为0的正态分布&#xff1a; p ( …

外汇天眼:新西兰监管机构永久性停止对David McEwen及与其相关的实体的命令

新西兰金融市场管理局&#xff08;FMA&#xff09;已对David Elgar McEwen及与其相关的实体&#xff08;McEwen and Associates&#xff09;发布了永久性停止令。 与McEwen先生相关的实体包括Stockfox Limited、Cosmopolitan Holdings Limited、Strategy Services Limited、Fun…

Ubuntu系统使用快速入门实践(七)——软件安装与使用(3)

Ubuntu系统使用快速入门实践系列文章 下面是Ubuntu系统使用系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 Ubuntu系统使用快速入门实践系列文章总链接 下面是专栏地址&#xff1a; Ubuntu系统使用快速入门实践系列文章专栏 文章目录 Ubuntu系统使用快速…

在uniapp中,可以使用那些预定义的样式类

u-flex&#xff1a;设置元素为弹性布局。u-flex-v&#xff1a;设置元素为纵向弹性布局。u-flex-h&#xff1a;设置元素为横向弹性布局。u-p-10&#xff1a;设置元素的上下左右边距为10rpx。u-p-t-10&#xff1a;设置元素的上边距为10rpx。u-p-b-10&#xff1a;设置元素的下边距…

教育心得整理

压抑使人反抗&#xff0c;反抗就是报复&#xff0c;报复就会引起犯罪。要消灭犯罪&#xff0c;我们必须杜绝引起孩子报复心理的行为&#xff0c;更重要的是&#xff0c;我们一定要对孩子表现出来爱与尊重 限制批评的次数限制每次批评的范围限制每次批评的强度 当彼此的信任和…

第一百九十五回 连接蓝牙设备的细节

文章目录 1. 概念介绍2. 实现方法2.1 示例代码2.2 知识回顾2.3 实现方法3. 示例代码我们在上一章回中介绍了"分享三个使用TextField的细节"沉浸式状态样相关的内容,本章回中将介绍SliverList组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中…

机器学习之无监督学习:九大聚类算法

今天&#xff0c;和大家分享一下机器学习之无监督学习中的常见的聚类方法。 今天&#xff0c;和大家分享一下机器学习之无监督学习中的常见的聚类方法。 在无监督学习中&#xff0c;我们的数据并不带有任何标签&#xff0c;因此在无监督学习中要做的就是将这一系列无标签的数…

Spring Cloud Gateway中对admin端点进行认证

前言 我们被扫了一个漏洞&#xff0c;SpringBoot Actuator 未授权访问&#xff0c;漏洞描述是这样的&#xff1a; Actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块&#xff0c;借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计…

计算机基础知识65

cookie和session的使用 # 概念&#xff1a;cookie 是客户端浏览器上的键值对 # 目的&#xff1a;为了做会话保持 # 来源&#xff1a;服务端写入的&#xff0c;服务端再返回的响应头中写入&#xff0c;浏览器会自动取出来 存起来是以key value 形式&#xff0c;有过期时间、path…

STM32单片机项目实例:基于TouchGFX的智能手表设计(3)嵌入式程序任务调度的设计

STM32单片机项目实例&#xff1a;基于TouchGFX的智能手表设计&#xff08;3&#xff09;嵌入式程序任务调度的设计 目录 一、嵌入式程序设计 1.1轮询 1.2 前后台&#xff08;中断轮询&#xff09; 1.3 事件驱动与消息 1.3.1 事件驱动的概念 1.4 定时器触发事件驱动型的任…