当前位置: 首页 > article >正文

深度学习|表示学习|卷积神经网络|输出维度公式如何理解?|16

如是我闻: 当我们对输入图像进行卷积时,输出的宽度和高度可以通过以下公式计算:

输出大小 = 输入大小 − 卷积核大小 + 2 ⋅ 填充大小 步长 + 1 \text{输出大小} = \frac{\text{输入大小} - \text{卷积核大小} + 2 \cdot \text{填充大小}}{\text{步长}} + 1 输出大小=步长输入大小卷积核大小+2填充大小+1
池化(Pooling)的输出大小公式类似卷积,但更加简单:

输出大小 = 输入大小 − 池化窗口大小 步长 + 1 \text{输出大小} = \frac{\text{输入大小} - \text{池化窗口大小}}{\text{步长}} + 1 输出大小=步长输入大小池化窗口大小+1

下面让我们用一个直观的例子来加深一下对输出大小的理解


想象一个操场和一块跳格子布

  1. 操场是输入图片

    • 假设操场很大,我们把它分成一格一格的方块,像下图:
      操场(输入图片):
      [□ □ □ □ □]
      [□ □ □ □ □]
      [□ □ □ □ □]
      [□ □ □ □ □]
      [□ □ □ □ □]
      

    这里有 5 × 5 5 \times 5 5×5 的方块。我们要用“跳格子布”来覆盖操场的一部分并“滑动”,看我们可以跳多少次。

  2. 跳格子布是池化窗口

    • 比如,我们的跳格子布是 3 × 3 3 \times 3 3×3 的大小,它长这样:
      跳格子布(池化窗口):
      [■ ■ ■]
      [■ ■ ■]
      [■ ■ ■]
      

    跳格子布每次能覆盖 3 × 3 3 \times 3 3×3 的区域。

  3. 滑动是步长

    • 每次把跳格子布从操场上向右移动。比如:
      • 如果步长是 1,就往右挪 1 格;
      • 如果步长是 2,就往右挪 2 格。
  4. 规则:只要跳格子布还在操场范围内,就可以跳一次


公式背后的意义

我们想知道这个跳格子布能跳多少次(输出的大小)?
公式告诉我们:
跳的次数 = 操场的大小 − 跳格子布的大小 每次滑动的距离 + 1 \text{跳的次数} = \frac{\text{操场的大小} - \text{跳格子布的大小}}{\text{每次滑动的距离}} + 1 跳的次数=每次滑动的距离操场的大小跳格子布的大小+1


一个直观的例子

假设:
  • 操场大小 5 × 5 5 \times 5 5×5
  • 跳格子布大小 3 × 3 3 \times 3 3×3
  • 步长是 1(每次跳格子布只往右挪 1 格)。
按公式计算:
  • 操场的大小是 5,跳格子布的大小是 3,步长是 1。

  • 横着跳的次数:
    5 − 3 1 + 1 = 3 \frac{5 - 3}{1} + 1 = 3 153+1=3
    所以跳格子布在每一行可以跳 3 次。

  • 纵着跳的次数也一样:
    5 − 3 1 + 1 = 3 \frac{5 - 3}{1} + 1 = 3 153+1=3
    所以总的输出大小是 ( 3 \times 3 )。

画出来:

跳格子布的位置会是:

  • 第一次跳:
    [■ ■ ■ □ □]
    [■ ■ ■ □ □]
    [■ ■ ■ □ □]
    
  • 第二次跳:
    [□ ■ ■ ■ □]
    [□ ■ ■ ■ □]
    [□ ■ ■ ■ □]
    
  • 第三次跳:
    [□ □ ■ ■ ■]
    [□ □ ■ ■ ■]
    [□ □ ■ ■ ■]
    

换一个更大的步长

如果步长变成 2 呢?

  • 横着跳的次数:
    5 − 3 2 + 1 = 2 \frac{5 - 3}{2} + 1 = 2 253+1=2
    所以跳格子布在每一行可以跳 2 次。

  • 纵着跳的次数:
    5 − 3 2 + 1 = 2 \frac{5 - 3}{2} + 1 = 2 253+1=2
    所以总的输出大小是 2 × 2 2 \times 2 2×2

画出来:

跳格子布的位置会是:

  • 第一次跳:
    [■ ■ ■ □ □]
    [■ ■ ■ □ □]
    [■ ■ ■ □ □]
    
  • 第二次跳:
    [□ □ □ ■ ■]
    [□ □ □ ■ ■]
    [□ □ □ ■ ■]
    

公式的本质

  1. 操场有多大(输入图片的大小)。
  2. 跳格子布有多大(池化窗口的大小)。
  3. 每次挪动多远(步长)。

公式计算的,就是跳格子布在操场上可以跳多少次(输出大小)。
更大、更密的跳格子布会减少能跳的次数,步长越大,跳的次数也会减少。


为什么有“+1”?

问题:

当滑动窗口从左上角开始往右或往下移动时,滑动的次数按距离计算。如果没有 “+1”,只会计算窗口滑动了几次完整步长,但不会考虑窗口的起始位置

公式分成两部分:
1. ( 输入大小 − 窗口大小 ) / 步长 (\text{输入大小} - \text{窗口大小}) / \text{步长} (输入大小窗口大小)/步长:计算滑动窗口最多滑动多少步。
2. “+1”:表示滑动窗口的初始位置也算一次覆盖(因为滑动窗口最开始就覆盖了输入的一部分)。


举个具体例子

假设:
  • 输入大小是 5 5 5 长度为 5 的操场)。
  • 窗口大小是 3 3 3(跳格子布的长度为 3)。
  • 步长是 1 1 1(每次跳格子布挪动 1 格)。

如果没有 “+1”
输入大小 − 窗口大小 步长 = 5 − 3 1 = 2 \frac{\text{输入大小} - \text{窗口大小}}{\text{步长}} = \frac{5 - 3}{1} = 2 步长输入大小窗口大小=153=2
这表示跳格子布只能跳 2 次

但实际上,我们可以从 起点 开始跳,跳格子布覆盖输入的最左侧,这是第 1 次覆盖。
然后向右挪动覆盖第 2 格,接着挪动覆盖第 3 格。
总共 3 次

因此需要 “+1” 来补上初始位置,公式变为:
输入大小 − 窗口大小 步长 + 1 = 3 \frac{\text{输入大小} - \text{窗口大小}}{\text{步长}} + 1 = 3 步长输入大小窗口大小+1=3


再换一个例子(步长 > 1 的情况)

假设:
  • 输入大小是 6 6 6
  • 窗口大小是 ( 3 );
  • 步长是 ( 2 )。

如果没有 “+1”:
6 − 3 2 = 1.5 \frac{6 - 3}{2} = 1.5 263=1.5
这里结果是小数,表示跳了 1.5 次,显然不合理。

考虑加上起始位置:
6 − 3 2 + 1 = 2 \frac{6 - 3}{2} + 1 = 2 263+1=2
表示窗口在起点覆盖一次,然后滑动覆盖第 2 次,符合逻辑。


总的来说:

公式的本质就是在问:一个小窗口(池化窗口)在一个大图(输入)里,可以覆盖多少个位置?

“+1” 的意义:
  • 当我们计算滑动窗口的次数时,公式 ((\text{输入大小} - \text{窗口大小}) / \text{步长}) 只算了窗口能滑动的次数,而没有把窗口的初始位置计算进去。
  • “+1” 就是为了补上窗口覆盖输入时的第一个位置。

以上


http://www.kler.cn/a/522732.html

相关文章:

  • 【win11】解决msrdc.exe窗口启动导致周期性失去焦点
  • Java 大视界 -- Java 大数据在生物信息学中的应用与挑战(67)
  • 第19篇:python高级编程进阶:使用Flask进行Web开发
  • Airflow:精通Airflow任务依赖
  • Versal - 基础3(AXI NoC 专题+仿真+QoS)
  • CRM 微服务
  • 宝塔中运行java项目 报权限不足
  • 14-6-2C++STL的list
  • mysql统计每个表行数、大小以及数据库总行数、大小
  • 洛谷题目 P5994 [PA 2014] Kuglarz 题解 (本题较难)
  • 深入浅出 Rust 的强大 match 表达式
  • 怎么样把pdf转成图片模式(不能复制文字)
  • PyCharm介绍
  • 宝塔面板SSL加密访问设置教程
  • 自助设备系统设置——对接POS支付
  • 《程序人生》工作2年感悟
  • 蓝桥杯python语言基础(1)——编程基础
  • (2025 年最新)MacOS Redis Desktop Manager中文版下载,附详细图文
  • 【BQ3568HM开发板】如何在OpenHarmony上通过校园网的上网认证
  • USB鼠标的数据格式
  • React 封装高阶组件 做路由权限控制
  • 梯度下降优化算法-Adam
  • 【无标题】规范学生的课堂行为。
  • 指针的介绍2后
  • 【Rust自学】15.7. 循环引用导致内存泄漏
  • Spring AOP原理