深度神经网络中的卷积

2023-05-16

文章目录

  • 卷积单元
    • 经典卷积运算
      • 经典二维卷积
      • 经典膨胀二维卷积运算
      • 经典二维转置卷积运算
  • 实验分析
    • 实验说明
    • 实验结果
  • 参考文献

卷积单元

本文给出了四维张量卷积的表达式,卷积输出大小的表达式,以及Matlab和PyTorch下卷积实例。

直观地理解卷积

经典卷积运算

经典二维卷积

设有 N i N_i Ni 个二维卷积输入 I ∈ R N i × C i × H i × W i {\bm I} \in {\mathbb R}^{N_i × C_i \times H_i \times W_i} IRNi×Ci×Hi×Wi, C k × C i C_k \times C_i Ck×Ci 个二维卷积核 K ∈ R C k × C i × H k × W k {\bm K} \in {\mathbb R}^{C_k \times C_i \times H_k \times W_k} KRCk×Ci×Hk×Wk, N o N_o No 个卷积输出记为 O ∈ R N o × C o × H o × W o {\bm O} \in {\mathbb R}^{N_o × C_o \times H_o \times W_o} ORNo×Co×Ho×Wo, 在经典卷积神经网络中, 有 C k = C o , N o = N i C_k = C_o, N_o = N_i Ck=Co,No=Ni, K {\bm K} K I \bm I I 间的二维卷积运算可以表示为

O n o , c o , : , : = ∑ c i = 0 C i − 1 I n o , c i , : , : ∗ K c o , c i , : , : = ∑ c i = 0 C i − 1 Z n o , c o , c i , : , : \begin{aligned} {\bm O}_{n_o, c_o, :, :} &= \sum_{c_i=0}^{C_i-1} {\bm I}_{n_o, c_i, :,:} * {\bm K}_{c_o, c_i, :,:} \\ &= \sum_{c_i=0}^{C_i-1}{\bm Z}_{n_o, c_o, c_i, :, :} \end{aligned} Ono,co,:,:=ci=0Ci1Ino,ci,:,:Kco,ci,:,:=ci=0Ci1Zno,co,ci,:,:
其中, ∗ * 表示经典二维卷积运算, 卷积核 K c o , c i , : , : {\bm K}_{c_o, c_i, :,:} Kco,ci,:,: 与输入 I n o , c i , : , : {\bm I}_{n_o, c_i, :,:} Ino,ci,:,: 的卷积结果记为 Z n o , c o , c i , : , : ∈ R H o × W o {\bm Z}_{n_o, c_o, c_i, :, :}\in {\mathbb R}^{H_o \times W_o} Zno,co,ci,:,:RHo×Wo, 则

Z n o , c o , c i , h o , w o = ∑ h = 0 H k − 1 ∑ w = 0 W k − 1 I n o , c i , h o + h − 1 , w o + w − 1 ⋅ K c o , c i , h , w . {\bm Z}_{n_o, c_o, c_i, h_o, w_o} = \sum_{h=0}^{H_k-1}\sum_{w=0}^{W_k-1} {\bm I}_{n_o, c_i, h_o + h - 1, w_o + w - 1} \cdot {\bm K}_{c_o, c_i, h, w}. Zno,co,ci,ho,wo=h=0Hk1w=0Wk1Ino,ci,ho+h1,wo+w1Kco,ci,h,w.

记卷积过程中, 高度与宽度维上填补(padding)大小为 H p × W p H_p \times W_p Hp×Wp, 卷积步长为 H s × W s H_s \times W_s Hs×Ws, 则卷积输出大小满足

H o = ⌊ H i + 2 × H p − H k H s + 1 ⌋ W o = ⌊ W i + 2 × W p − W k W s + 1 ⌋ \begin{array}{ll} H_{o} &= \left\lfloor\frac{H_{i} + 2 \times H_p - H_k}{H_s} + 1\right\rfloor \\ W_{o} &= \left\lfloor\frac{W_{i} + 2 \times W_p - W_k}{W_s} + 1\right\rfloor \end{array} HoWo=HsHi+2×HpHk+1=WsWi+2×WpWk+1

卷积神经网络中的卷积操作, 实际上是相关操作, 因为在运算过程中, 未对卷积核进行翻转操作

下图所示为二维卷积操作示意图.

卷积示意图

经典膨胀二维卷积运算

设有 N i N_i Ni 个二维卷积输入 I ∈ R N i × C i × H i × W i {\bm I} \in {\mathbb R}^{N_i × C_i \times H_i \times W_i} IRNi×Ci×Hi×Wi, C k × C i C_k \times C_i Ck×Ci 个二维卷积核 K ∈ R C k × C i × H k × W k {\bm K} \in {\mathbb R}^{C_k \times C_i \times H_k \times W_k} KRCk×Ci×Hk×Wk, 高度与宽度维上填补(padding)大小为 H p × W p H_p×W_p Hp×Wp, 膨胀(dilation)大小为 H d × W d H_d×W_d Hd×Wd, 卷积步长为 H s × W s H_s×W_s Hs×Ws, 在经典膨胀二维卷积神经网络中, 有 C k = C o , N o = N i C_k = C_o, N_o = N_i Ck=Co,No=Ni, 则卷积后的输出为 O ∈ R N o × C o × H o × W o {\bm O} \in {\mathbb R}^{N_o × C_{o}\times H_{o} \times W_{o}} ORNo×Co×Ho×Wo, 其中

H o = ⌊ H i + 2 × H p − H d × ( H k − 1 ) − 1 H s + 1 ⌋ W o = ⌊ W i + 2 × W p − W d × ( W k − 1 ) − 1 W s + 1 ⌋ \begin{array}{ll} H_{o} &= \left\lfloor\frac{H_{i} + 2 \times H_p - H_d \times (H_k - 1) - 1}{H_s} + 1\right\rfloor \\ W_{o} &= \left\lfloor\frac{W_{i} + 2 \times W_p - W_d \times (W_k - 1) - 1}{W_s} + 1\right\rfloor \end{array} HoWo=HsHi+2×HpHd×(Hk1)1+1=WsWi+2×WpWd×(Wk1)1+1

可以发现当膨胀大小为 H d × W d = 1 × 1 H_d×W_d = 1×1 Hd×Wd=1×1 时, 膨胀卷积退化为经典卷积.

更多二维卷积示意图参见 A technical report on convolution arithmetic in the context of deep learning.

经典二维转置卷积运算

二维转置卷积是一种解卷积方法, 设有二维卷积核 K ∈ R C o × H k × W k {\bm K} \in {\mathbb R}^{C_o\times H_k \times W_k} KRCo×Hk×Wk, 二维卷积输入 I ∈ R N i × C i × H i × W i {\bm I} \in {\mathbb R}^{N_i × C_{i}\times H_{i} \times W_{i}} IRNi×Ci×Hi×Wi, 高度与宽度维上填补(padding)大小为 H p × W p H_p×W_p Hp×Wp, 膨胀(dilation)大小为 H d × W d H_d×W_d Hd×Wd, 卷积步长为 H s × W s H_s×W_s Hs×Ws, 则卷积后填补(output-padding)大小为 H o p × W o p H_{op}×W_{op} Hop×Wop, 则卷积后的输出为 Y ∈ R N × C o × H o × W o {\bm Y} \in {\mathbb R}^{N × C_{o}\times H_{o} \times W_{o}} YRN×Co×Ho×Wo, 其中

H o = ( H i − 1 ) × H s − 2 × H p + H d × ( H k − 1 ) + H o p + 1 W o = ( W i − 1 ) × W s − 2 × W p + W d × ( W k − 1 ) + W o p + 1 \begin{array}{ll} H_{o} &= (H_{i} - 1) \times H_s - 2 \times H_p + H_d \times (H_k - 1) + H_{op} + 1 \\ W_{o} &= (W_{i} - 1) \times W_s - 2 \times W_p + W_d \times (W_k - 1) + W_{op} + 1 \end{array} HoWo=(Hi1)×Hs2×Hp+Hd×(Hk1)+Hop+1=(Wi1)×Ws2×Wp+Wd×(Wk1)+Wop+1

实验分析

实验说明

以二维卷积为例, 设有矩阵 a , b {\bm a}, {\bm b} a,b

a = [ 1 2 3 4 5 6 7 8 9 ] {\bm a} = \left[ {\begin{array}{ccc} 1&2&3\\ 4&5&6\\ 7&8&9 \end{array}} \right] a=147258369

b = [ 1 2 3 4 ] {\bm b} = \left[ {\begin{array}{ccc} 1&2\\ 3&4 \end{array}} \right] b=[1324]

则有卷积 a ∗ b {\bm a}*{\bm b} ab

a ∗ b = [ 1 4 7 6 7 23 33 24 19 53 63 42 21 52 59 36 ] {\bm a}*{\bm b} = \left[ {\begin{array}{cccc} 1&4&7&6\\ 7&{23}&{33}&{24}\\ {19}&{53}&{63}&{42}\\ {21}&{52}&{59}&{36} \end{array}} \right] ab=171921423535273363596244236

互相关 a ⋆ b {\bm a}\star{\bm b} ab

a ⋆ b = [ 4 11 18 9 18 37 47 21 36 67 77 33 14 23 26 9 ] {\bm a}\star{\bm b} = \left[ {\begin{array}{cccc} 4&{11}&{18}&9\\ {18}&{37}&{47}&{21}\\ {36}&{67}&{77}&{33}\\ {14}&{23}&{26}&9 \end{array}} \right] ab=41836141137672318477726921339

实验结果

在 Matlab 环境中, 输入如下代码, 求解卷积 a ∗ b {\bm a} * {\bm b} ab 与相关 a ⋆ b {\bm a}\star{\bm b} ab

   a = [1 2 3;4 5 6;7 8 9];
   b = [1 2;3 4];

   disp(a)
   disp(b)

   % convolution
   disp(conv2(a, b))

   % cross-correlation
   disp(xcorr2(a, b))

MATLAB中的2D卷积和相关结果为

     1     2     3
     4     5     6
     7     8     9

     1     2
     3     4

     1     4     7     6
     7    23    33    24
    19    53    63    42
    21    52    59    36

     4    11    18     9
    18    37    47    21
    36    67    77    33
    14    23    26     9

在 Python 环境中, 输入如下代码, 求解卷积 a ∗ b {\bm a} * {\bm b} ab

   import torch as th

   a = th.tensor([[1., 2, 3], [4, 5, 6], [7, 8, 9]])
   b = th.tensor([[1., 2], [3, 4]])

   a = a.unsqueeze(0)  # 1x3x3
   a = a.unsqueeze(0)  # 1x1x3x3
   b = b.unsqueeze(0)  # 1x2x2
   b = b.unsqueeze(0)  # 1x1x2x2

   print(a, a.size())
   print(b, b.size())

   c = th.conv2d(a, b, stride=1, padding=1)

   print(c)

PyTorch中的2D卷积结果为

   tensor([[[[1., 2., 3.],
             [4., 5., 6.],
             [7., 8., 9.]]]]) torch.Size([1, 1, 3, 3])
   tensor([[[[1., 2.],
             [3., 4.]]]]) torch.Size([1, 1, 2, 2])
   tensor([[[[ 4., 11., 18.,  9.],
             [18., 37., 47., 21.],
             [36., 67., 77., 33.],
             [14., 23., 26.,  9.]]]])

对比结果可以发现, PyTorch中的2D卷积实际上是2D相关操作, 与此类似, Tensorflow等深度神经网络框架中的卷积均为相关操作. 但这并不影响网络的性能, 这是因为卷积核是通过网络学习的, 通过学习得到的卷积核可以看作是翻转后卷积核.

参考文献

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度神经网络中的卷积 的相关文章

  • 去掉文件名中的特殊符号及中文

    文章目录 做深度学习算法收集数据时 xff0c 来源各种各样 xff0c 导至文件名混有各种特殊符号 xff0c 所在这里有一段代码 xff0c 可以把文件名进行处理 xff0c 只保留数字 字母和下划线 xff0c 然后对文件进行重命名
  • pip常用命令

    文章目录 看了一篇介绍pip的 xff0c 记录在这里 https mp weixin qq com s BejnKBp1OGTyW2SzHiCwcw 有安装 卸载 下载 xff0c 升级等使用方法 再贴个图 xff1a
  • 如何搭建高质量、高效率的前端工程体系--页面结构继承

    推荐理由 xff1a 推荐理由 xff1a 程序员在我们的印象中 xff0c 就是不停的敲代码 xff1b 而写的程序如何确保不出现bug 而且还能及时发现问题 xff0c 下面我推荐的这篇文章 xff0c 围绕整个前端的开发流程出发解决这
  • onnx删除无用属性

    这里写自定义目录标题 在推理onnx模型时 xff0c 报了一个错 xff0c 如下 xff1a InvalidGraph ONNXRuntimeError 10 INVALID GRAPH This is an invalid model
  • onnx模型显示输出形状

    在用netron查看模型时 xff0c 希望看到各个节点的shape xff0c 可以执行以下代码 1 依赖包 pip install onnx pip install onnx graphsurgeon index url https p
  • 使用opencv截取旋转框目标

    使用opencv截取旋转框目标 1 第一种方法2 第二种方法3 两种方法的简单对比4 opencv 最小面积矩形返回角度的理解4 1 version4 2之前4 2 version4 2之后 本文列举了两种方法 xff0c 使用的数据如图
  • Tensorflow pytorch及paddle交叉熵损失函数类标签及label smooth配置方法

    交叉熵损失函数类标签及label smooth配置方法 1 无class weight 无label smooth1 1 pytorch 输出1 2 paddle 输出1 3 tensorflow 输出 2 有label smooth 没有
  • 检测之YOLO转VOC

    文章目录 1 整理Yolo图像和标签文件2 实现yolo到voc的转换 检测系列相关文章参考如下链接 xff1a VOC数据的结构介绍及自定义生成 xff0c 用labelimg自已标注VOC标准数据的生成及分析 VOC易用labelimg
  • 检测之VOC转YOLO

    文章目录 检测所用数据有几种文件格式 xff0c 我们对于检测 xff0c 将使用VOC格式做为基础 xff0c 与其它格式的的互转实现部分如下 xff1a 检测系列相关文章参考如下链接 xff1a VOC数据的结构介绍及自定义生成 xff
  • windows安装wsl2

    总的来说是按照这三个链接来的 xff0c 也写了一个大体流程 wsl对win版本有要求 xff0c 可以 win 43 r winver查看 原始参考链接 xff1a 1 xff09 https zhuanlan zhihu com p 4
  • 2、picodet转onnx裁剪及python onnxruntime推理

    文章目录 1 对picodet xs1 1 动态图转静态图1 2 静态图转onnx1 3 paddle 含后处理 all 版本的推理1 4 onnx 含后处理 all 进行推理1 5 onnx 不含后处量 base模型推理1 5 1 获取o
  • 3、picodet c++版onnxruntime推理及reshape和transpose的c++实现

    文章目录 1 完整onnx c 43 43 推理2 裁剪后模型的推理2 1 分类reshape和transpose用python模拟c 43 43 2 2 回归的reshape和transpose的python模拟 3 softmax改进
  • linux拷备部分文件

    功能两个 1 从一个文件夹下拷备随机选取部分文件到另一个文件夹 span class token function ls span src path span class token operator span span class tok
  • 翻译:在vscode中调试es6

    原文 xff1a How to debug ES6 NodeJS with VSCode katopz Medium 快速实践 先上项目 xff1a katopz vscode debug nodejs es6 How to debug E
  • JavaScript 的addEventListener() 事件监听详解!

    JavaScript 的addEventListener 事件监听详解 xff01 addEventListener 用于向指定元素添加事件 可以向一个元素添加多次事件或者多次不同事件 xff0c 后面的事件是不会覆盖前面的 语法 xff1
  • moviepy快速视频转图片

    功能如标题 xff0c 代码如下 xff1a span class token keyword import span os span class token keyword import span numpy span class tok
  • 获取onnx模型中权重并画出分布图

    如下为代码 xff0c 主要应用场景是在做模型量化处理时 xff0c 常见的量化是int8 int16 如果数据分布不合适会存在较大的量化精度损失 比如int8 xff0c 希望权得的分布是在 128 127之间 span class to
  • C# Newtonsoft.Json JObject移除属性,在序列化时忽略

    一 针对 单个 对象移除属性 xff0c 序列化时忽略处理 JObject实例的 Remove 方法 xff0c 可以在 指定序列化时移除属性和值 示例如下 xff1a json 序列化 JObject obj1 61 JObject Fr
  • 2016,梦想起航

    2016 xff0c 梦想起航 10 9 8 7 6 5 4 3 2 1 xff0c 新年快乐 xff01 xff0c 伴随着跨年晚会上各位主持人的新年祝福 xff0c 2017年的大幕正式开启 xff0c 2016年的挂历已经发黄 xff

随机推荐

  • 基础篇——Linux和树莓派发行版以及raspbian、ubuntu、debian、ros的关系

    背景故事 初学Linux经常会听到Linux ubuntu debian raspbian centos等等名词 xff0c 它们之间是什么关系 xff0c 傻傻分不清楚 xff0c 这里摘录一些书上的内容 xff0c 理清楚它们的关系 L
  • 中级篇——树莓派系统备份恢复的两种方式

    树莓派系统备份恢复 方式一 xff1a 使用树莓派烧录工具 xff0c Win32DiskImager 工具的读取功能 xff0c 如下图 优点是操作简单 xff0c 缺点也很明显 xff0c 因为是全盘读取 xff0c 所以读取的备份文件
  • 利用实例学CMMI V2.0 (1)

    越来越多客户询问关于CMMI v2 0 xff0c 而且这个模型不像v1 3可以免费下载 xff0c 所以我们需要一些辅助资料 xff0c 帮一些有兴趣的人预先了解 xff0c 尤其是已经学过v1 3的 xff0c 可以在此基础上学习v2
  • Ubuntu 16.04升级python3.6及解决终端打不开的bug

    Ubuntu 16 04 默认安装python3的版本为python3 5 xff0c 而在一些场景下我们需要用到python3 6 xff0c 于是本人尝试将python3 5升级为python3 6 xff0c 但期间出现了界面模式下终
  • Dockerfile 指令详细介绍

    使用 Dockerfile 定制镜像 这里仅讲解如何运行 Dockerfile 文件来定制一个镜像 具体 Dockerfile 文件内指令详解 xff0c 将在下一节中介绍 xff0c 这里你只要知道构建的流程即可 下面以定制一个nginx
  • linux系统下cat命令的使用

    运维那些事 2017 01 22 21 15 cat命令是Linux系统下查看文件内容用的指令 xff0c 还可以将显示的信息转入或附加到文件上 命令格式 cat 选项 文件 命令功能 cat主要有三大功能 xff1a 一次显示整个文件 c
  • 使用Python爬取淘宝两千款套套

    各位同学们 xff0c 好久没写原创技术文章了 xff0c 最近有些忙 xff0c 所以进度很慢 xff0c 给大家道个歉 gt 警告 xff1a 本教程仅用作学习交流 xff0c 请勿用作商业盈利 xff0c 违者后果自负 xff01 如
  • 大学那会儿,我读过的技术经典图书

    我2009年考进大学的计算机系 上大学前我对电脑的使用仅限于上QQ xff0c 看小说 xff0c 可以说是零基础 但通过三年的努力及对计算机专业的喜爱 xff0c 我顺利保送到自己梦寐以求的学校攻读研究生 大学期间看了不少书 xff0c
  • vscode 配置 git (配置、暂存、推送、拉取、免密)

    前些天发现了一个巨牛的人工智能学习网站 xff0c 通俗易懂 xff0c 风趣幽默 xff0c 忍不住分享一下给大家 点击跳转到教程 vscode 中对 git 进行了集成 xff0c 很多操作只需点击就能操作 xff0c 无需写一些 gi
  • 已知子网掩码,确定ip地址范围

    主要是把 ip地址和子网掩码在二进制下进行对比 ip地址分成两个部分 xff0c 网络号和主机号 凡是在子网掩码对比下 xff0c 1 代表了网络号 xff0c 0 代表了主机号 然后对比后 xff0c 把主机号最小 xff08 全0 xf
  • virmach主机购买和使用

    01购买 参考教程 xff1a https www jb51 net yunying 470007 html 需要注意的是购买后 xff0c 登录的帐号和密码会发送到默认邮箱中 xff0c 拿到用户名密码可以先使用ssh登录 xff0c 查
  • Xmanager使用方法

    服务器 xff1a CentOS 7 6 GNOME桌面环境 xff08 若最小化安装 xff0c 默认是无桌面的 xff0c 那么就要安装桌面 xff0c 参考百度 xff09 个人主机 xff1a Windows 10专业版 xff0c
  • 制作便携式随身系统(以Ubuntu为例)

    文章目录 说明准备硬件软件 启动盘制作安装Ubuntu到随身存储设备概述 为便携式系统创建GRUB引导安装 GRUB2 到U盘或移动硬盘制作Grub引导菜单 问题与解决拔掉U盘进不了原来的系统随身系统无法在别的电脑上启动welcome to
  • 谈谈了解的几个专业

    本文涉及专业 智能科学与工程通信工程电子信息工程集成电路设计与集成系统微电子科学与工程计算机科学与技术电磁场与无线技术遥感科学与技术 这些学科专业 xff0c 很多之间是相互交叉的 以下仅作参考 xff01 xff01 xff01 随便聊聊
  • 深度学习平台框架

    简介 分类 模型转换 网络参数转到MAT 文件 keras权重到mat 可知直接用matlab读取hdf5文件 也可以通过如下脚本 keras2mat py 转换 span class token comment usr bin env p
  • Ubuntu16.04 + NVIDIA RTX3090 + Pytorch + Tensorflow

    文章目录 说明有用链接显卡驱动安装文件下载一次性安装显示驱动和cuda计算套件仅安装显示驱动仅安装cuda计算套件 安装Pytorch安装pytorch1 7源码安装pytorch1 8源码安装torchvision RTX3090性能问题
  • centOS jdk安装

    1 输入yum list installed grep java 可以查看CentOS自带的Java环境 2 卸载jdk yum y remove java 1 8 0 openjdk 输入yum y remove tzdata java
  • 元学习

    这里写自定义目录标题 说明比较好的资料文档代码 常用数据集介绍Omniglot 说明 比较好的资料 文档 torchmeta pytorch meta learning libraryPaper repro Deep Metalearnin
  • Markdown简明教程

    这里是目录 xff0c 输入 TOC 可以自动生成 文章目录 常用语法 一级标题 基本语法 二级标题 数学公式添加图片添加代码段 高级扩展语法插入classDiagram类图插入Mermaid流程图插入UML图插入甘特图 其它 常用语法 一
  • 深度神经网络中的卷积

    文章目录 卷积单元经典卷积运算经典二维卷积经典膨胀二维卷积运算经典二维转置卷积运算 实验分析实验说明实验结果 参考文献 卷积单元 本文给出了四维张量卷积的表达式 xff0c 卷积输出大小的表达式 xff0c 以及Matlab和PyTorch