Pytorch中统计模型的计算量FLOPs和参数Params
1.计算量和参数量
1.1 计算量和参数量的含义
1.2 计算量的单位
1.3 参数量的单位
2.使用库函数统计神经网络的运算量和参数量
2.1 thop库
单输入
补充模型输入有多个的情况
2.2 ptflops 库
2.3 pytorch_model_summary库
1.计算量和参数量
1.1 计算量和参数量的含义
神经网络的计算量和参数量是评估其性能和效率的两个重要指标。计算量和参数量分别对应时间复杂度和空间复杂度。 参数量: 参数量指的是神经网络中所有可学习的权重和偏置的总和。在训练过程中,这些参数会通过梯度下降等优化算法进行调整。参数量直接关系到模型的大小,以及模型对计算资源的占用。一般来说,参数量越大,模型的表达能力越强,但同时也意味着更高的计算和存储需求,更容易发生过拟合。 计算量: 计算量主要是指在神经网络的前向传播和反向传播过程中所需的浮点运算次数。这包括权重与输入的矩阵乘法、激活函数的计算等。计算量决定了模型运行的速度,对于实时应用来说尤其重要。计算量大的模型需要更长的训练时间,也要求更强的计算能力。
1.2 计算量的单位
在讨论神经网络的计算量时,常用的单位有MACs (Multiply-Accumulate Operations) 和 FLOPs (Floating Point Operations)。这两个单位用于衡量执行计算操作的数量,但它们之间有一些区别:
MAC (Multiply-Accumulate Operations): MAC 是指一个乘法操作后紧跟一个加法操作的数量。在深度学习中,MACs 通常用于衡量卷积操作的计算量,因为卷积操作涉及到权重和输入特征的乘法,然后将结果累加起来。 FLOPs (Floating Point Operations): FLOPs 是指浮点运算的总数。这个术语通常用于更广泛地描述任何涉及浮点数的计算操作。在深度学习中,FLOPs 用于衡量模型的总计算量,包括所有的乘法、加法和其他可能的操作(如激活函数的计算)。 由于每个 MAC 包含一个乘法和一个加法,所以 FLOPs 将是 MAC 计算量的两倍。
1.3 参数量的单位
参数量。每个参数可以是权重(在神经网络中的连接上)或者偏置项。参数量直接关系到模型的大小,以及模型对计算资源和存储的需求。
在深度学习中,参数量也常常用不同的单位来表示,以适应不同规模的模型: 千(K):1K = 1,000参数 百万(M):1M = 1,000,000参数 十亿(B):1B = 1,000,000,000参数
多层感知机 层数较少的时候,以K作为单位。 深度神经网络常以M作为单位。 大语言模型 如chatglm-6B 以B作为单位。
2.使用库函数统计神经网络的运算量和参数量
2.1 thop库
单输入
import torch
from torchsummary import summary
from thop import profile
from thop import clever_format
import torchvision.models as models
# 假设我们有一个预训练的模型
model = models.resnet50()
model.eval()
# 使用thop分析模型的运算量和参数量
input = torch.randn(1, 3, 224, 224) # 随机生成一个输入张量,这个尺寸应该与模型输入的尺寸相匹配
MACs, params = profile(model, inputs=(input,))
# 将结果转换为更易于阅读的格式
MACs, params = clever_format([MACs, params], '%.3f')
print(