IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 神经网络中的参数量和FLOPs的计算 -> 正文阅读

[人工智能]神经网络中的参数量和FLOPs的计算

1. 引言

在看论文时,经常会看到计算CNN的parameters、FLOPs等评价指标,用来评价神经网络在推理运算上的速度与性能。本文将要来一一介绍这些指标以及相应的计算公式。
闲话少说,我们直接开始吧!

2. 参数量

2.1 原理

Parameters为模型中所有需要学习的参数量,包括卷积层、全连接层等,同时也会反映出模型占用的內存大小,当参数量越大,所需的內存就越多。

CNN中卷积层的参数由卷积核权重与bias组成,假设input feature map的维度为H_in× W_in× C_in、kernel size为K_h× K_w,总共有C_out个kernel、output feature map的维度为H_out× W_out× C_out。

此时,卷积核的参数量是K_h× K_w× C_in× C_out,而bias的参数量是C_out,因此CNN的参数量如下图所示为两者的相加。
在这里插入图片描述
上述过程图示如下:
请添加图片描述

2.2 示例

接下来我们来看个具体的例子吧,假设input feature map的维度为5× 5× 3、kernel数量为7个且kernel size为3× 3、output feature map的维度为3× 3× 7,这样一层的计算量为3× 3× 3× 7 + 7 = 196。

上述过程图示如下:
请添加图片描述

2.3 实操

Parameters可以使用pytorch library torchinfo来进行计算,示例代码如下:

# 安裝 torchinfo
$ pip install torchinfo
# ================================
from torchinfo import summary
import torch
import torch.nn as nn
# 自定义模型
class MyModel(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(MyModel, self).__init__()
        self.layer = nn.Conv2d(in_channels, out_channels, (3, 3))
        
    def forward(self, x):
        x = self.layer(x)
        
model = MyModel(3, 7)
batch_size = 16
summary(model, input_size=(batch_size, 3, 5, 5))

输出如下:
请添加图片描述

3. FLOPs

3.1 原理

FLOPs全名为floating point operations(浮点数的运算数),指模型前向传播的计算量、计算速度,用于衡量模型的复杂度。模型在前向传播的过程,在卷积层、池化层、Batch Norm、active function、Upsample、Downsample等都会产生计算量,尤其是在卷积层上占比最高。这些计算量对于模型的部署有很大的影响。

? 值得注意的是FLOPs与FLOPS(floating point operations per second)不同,全大写的FLOPS是指每秒浮点数的运算次数,用于衡量硬件性能。

FLOPs的计算分为卷积核权重与bias两部分(Wx+b),令input feature map的维度为H_in× W_in× C_in、kernel size为K_h× K_w,且总共有C_out个kernel、output feature map的维度为H_out× W_out× C_out

3.2 示例

首先我们计算kernel的计算量,在进行一次卷积运算时,会需要(K_h× K_w× C_in)次乘法+(K_h× K_w× C_in -1)次加法。
举个例子,若input feature map的维度为5× 5× 1、kernel数量为1个且kernel size为3× 3、output feature map的维度为3× 3× 1。如下图所示,总共会有3× 3× 1 = 9个乘法、3× 3× 1 -1 = 8个加法。
请添加图片描述
接着是bias的计算量,bias只有加法的计算,在进行一次卷积运算时,若有bias则加1。因此考虑有bias后卷积层的计算量为(K_h× K_w× C_in)次乘法+(K_h× K_w× C_in -1 +1)次加法= 2× K_h× K_w× C_in

因此输出feature map的总计算量就会是2× K_h× K_w× C_in× H_out× W_out× C_out。上述过程,使用公式表示如下:
请添加图片描述
有时论文会使用别的单位,以下为不同单位间的换算公式:
请添加图片描述

4. 总结

最后,我们从原理到例子,由前入深地介绍了卷积神经网络中卷积层参数量和计算量的定义。

您学废了嘛?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:28:48  更:2022-11-05 00:30:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:47:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码