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

news/2025/2/15 7:58:12/
aidu_pl">

全连接层(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}})),但在实际应用中通常只考虑乘法操作。


http://www.ppmy.cn/news/1572185.html

相关文章

日本股市概览:主要指数、经济泡沫与现代市场趋势(中英双语)

日本股市概览:主要指数、经济泡沫与现代市场趋势 日本作为全球第三大经济体,其股票市场在国际金融体系中占有重要地位。从战后经济奇迹到20世纪末的房地产泡沫破裂,再到近年来的经济复苏和结构性改革,日本股市经历了大起大落&…

Linux中退出vi编辑器的命令

在Linux中退出vi编辑器的命令有以下几种‌: ‌保存并退出‌:在命令模式下,按下Esc键退出插入模式,然后输入:wq或:x,按下回车键即可保存修改并退出vi编辑器‌。 ‌不保存退出‌:在命令模式下,按…

二、通义灵码插件保姆级教学-IDEA(使用篇)

一、IntelliJ IDEA 中使用指南 1.1、代码解释 选择需要解释的代码 —> 右键 —> 通义灵码 —> 解释代码 解释代码很详细,感觉很强大有木有,关键还会生成流程图,对程序员理解业务非常有帮忙,基本能做到哪里不懂点哪里。…

《图解设计模式》笔记(十)用类来表现

二十二、Command模式:命令也是类 一个类调用某方法,虽然调用结果会反映在对象的状态中,但不会留下工作的历史记录。 若有一个类表示“请进行这项工作”的“命令”,每一项想做的工作就不再是“方法的调用”这种动态处理了,而是一个表示命令的类的实例,即可以用“物”来表…

Spring Boot应用开发

一、了解Spring Boot Spring Boot是一个基于Spring框架的开源Java基础框架,它可以帮助我们快速开发独立的、基于生产级的基于Spring框架的应用程序。简单来说,它就像是一个“超级助手”,帮你把很多复杂的配置都简化了,让你能更轻…

基于Swift实现仿IOS闹钟

仿 iOS 系统闹钟 添加闹钟效果图 收到通知效果图 更新日志 2018.09.12 由于 iOS 系统限制了注册本地推送的数量,最大的注册量为 64 条,且一旦超出 64 条,所有的推送都将失效,故而在添加推送的时候做了一个判断,超过…

Java 大视界 -- 人工智能驱动下 Java 大数据的技术革新与应用突破(83)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

KVM和OpenVZ的区别以及如何选择

KVM 和 OpenVZ 是目前市面上最为常见的两种虚拟化技术,两者各有其优缺点。了解这两者的区别能够帮助您挑选更加适合自身需求的VPS,本文中,我们就来从各个角度对比一下这两种技术,并提供一些选择上的建议。 什么是虚拟化&#xff…