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

如何计算模型的FLOPs以全连接层为例

全连接层(Fully Connected Layer,也称为稠密层或线性层)的计算量公式是 输入特征数 × 输出特征数,这个公式的推导基于全连接层的数学运算方式。以下是详细的解释:


1. 全连接层的数学运算

全连接层的计算可以表示为矩阵乘法:
[
\mathbf{y} = \mathbf{W} \cdot \mathbf{x} + \mathbf{b}
]
其中:

  • (\mathbf{x}) 是输入向量,维度为 (C_{\text{in}})(输入特征数)。
  • (\mathbf{W}) 是权重矩阵,维度为 (C_{\text{out}} \times C_{\text{in}})。
  • (\mathbf{b}) 是偏置向量,维度为 (C_{\text{out}})。
  • (\mathbf{y}) 是输出向量,维度为 (C_{\text{out}})。
计算步骤:
  1. 矩阵乘法:计算 (\mathbf{W} \cdot \mathbf{x})。
    • 每个输出特征 (y_i) 是输入特征 (x_j) 和权重 (W_{ij}) 的加权和。
    • 每个 (y_i) 需要 (C_{\text{in}}) 次乘法和 (C_{\text{in}}) 次加法。
    • 总共有 (C_{\text{out}}) 个输出特征,因此总的浮点运算量为:
      [
      C_{\text{in}} \times C_{\text{out}} \quad \text{(乘法)} + C_{\text{in}} \times C_{\text{out}} \quad \text{(加法)} = 2 \times C_{\text{in}} \times C_{\text{out}}
      ]
  2. 偏置加法:计算 (\mathbf{y} = \mathbf{W} \cdot \mathbf{x} + \mathbf{b})。
    • 每个输出特征 (y_i) 需要一次加法(加上偏置 (b_i))。
    • 总共有 (C_{\text{out}}) 次加法。
总计算量:

[
2 \times C_{\text{in}} \times C_{\text{out}} \quad \text{(矩阵乘法)} + C_{\text{out}} \quad \text{(偏置加法)}
]
由于 (C_{\text{out}}) 通常远小于 (2 \times C_{\text{in}} \times C_{\text{out}}),因此偏置加法的计算量可以忽略不计。最终的计算量近似为:
[
\text{FLOPs} \approx 2 \times C_{\text{in}} \times C_{\text{out}}
]


2. 为什么公式是 (C_{\text{in}} \times C_{\text{out}})

在实际应用中,通常只计算乘法操作的数量(因为乘法比加法更耗资源),因此全连接层的计算量公式简化为:
[
\text{FLOPs} = C_{\text{in}} \times C_{\text{out}}
]
这是因为:

  • 每个输出特征 (y_i) 需要 (C_{\text{in}}) 次乘法。
  • 总共有 (C_{\text{out}}) 个输出特征。

因此,总的乘法操作数为 (C_{\text{in}} \times C_{\text{out}})。


3. 举例说明

假设一个全连接层的输入特征数 (C_{\text{in}} = 1024),输出特征数 (C_{\text{out}} = 512),则:
[
\text{FLOPs} = 1024 \times 512 = 524,288
]
这表示该全连接层需要 524,288 次浮点乘法操作。


4. 总结

全连接层的计算量公式 输入特征数 × 输出特征数 是基于矩阵乘法的操作数推导出来的。每个输出特征需要与所有输入特征进行一次乘法操作,因此总的计算量为 (C_{\text{in}} \times C_{\text{out}})。如果需要更精确的计算量,可以加上加法操作(即 (2 \times C_{\text{in}} \times C_{\text{out}})),但在实际应用中通常只考虑乘法操作。

相关文章:

  • 前端框架Vue内容回顾
  • 递归图解Json
  • 【OJ项目】深入剖析 JudgeServiceImpl 类:题目的判题逻辑详解
  • 走出养生误区,拥抱健康生活
  • PyTorch Lightning LightningDataModule 介绍
  • 如何实现对 ELK 各组件的监控?试试 Metricbea
  • 机器学习 - 大数定律、可能近似正确学习理论
  • 《Python与C#:虚拟机与元宇宙的次元战争》
  • 选择题知识点(一)
  • linux下OSD使用SDL_ttf生成点阵数据,移植+开发代码详解
  • 数据结构 day05
  • Node.js 版本与 npm 的关系及版本特性解析:从开源项目看演进
  • 执行js生成json文件并动态写入数据
  • MySQL一些常见的索引失效情况
  • 探索技术新边界:让 HTML 电子凭证与二维码、PDF 完美融合
  • 网络安全-攻击路径
  • 【Elasticsearch】通过运行时字段在查询阶段动态覆盖索引字段
  • 神经网络常见激活函数 11-ReLU6函数
  • CEYEE希亦除螨仪重塑专业级深层除螨,被誉为高端除螨仪的新标杆!
  • Git -> Git配置密钥对,并查看公钥
  • 深圳网站建设 公司元/网页设计网站建设
  • 妈妈做愛网站/重庆seo建站
  • 政务公开与网站建设/百度指数怎么查
  • 加强两微一端和门户网站建设/广告推广方案怎么写
  • 网站开发 工期安排/网页设计制作网站模板图片
  • 指纹锁在什么网站做宣传好/网推接单平台有哪些