网络参数和 flops 计算
utils
本文字数:634 字 | 阅读时长 ≈ 2 min

网络参数和 flops 计算

utils
本文字数:634 字 | 阅读时长 ≈ 2 min

1. 网络参数计算

1.1 卷积层

假设输入维度为 m,输出维度为 n,卷积核大小为(k, k)

nn.Conv2d(3, 20, (3, 3), stride=1, padding=1) 其中 bias 默认为 True

上述参数为\(2 \times 3^{2} \times 20 + 20 = 560\),如果设置 bias=False 就是 540

1.2 线性层

假设输入维度为 m,输出维度为 n

nn.Linear(3, 20, bias=True) bias 默认为 True

上述参数为\(3 \times 20 + 20 = 80\),如果设置 bias=False 就是 60

1.3 归一化层

假设输入维度为 m

nn.BatchNorm2d(20, affine=True) affine 默认为 True

上述参数为\(2 \times 20 = 40\),如果 affine=False 为 0

2. Flops

Flops 的运算为:一次乘加运算为一次 Flops

2.1 卷积层

假设输入维度为 m,输出维度为 n,卷积核大小为(k, k),输出特征图的尺寸为(H,W)

一个卷积核每进行一次卷积所需要的乘法是\(mk^{2}\),加法为\(m(k^{2}-1)+(m-1)=mk^{2}-1\),所以一个卷积核的计算量为\(mk^{2}\)(忽略掉那-1 的运算,乘加就相等了),输出的特征图为 HW,输出通道为 n,所以总共的 Flops 为:\(HWn \times mk^{2}\)

2.2 线性层

假设输入维度为 m,输出维度为 n,batch 为 b

从下图可以看出 b=128,我们先不管这个参数,他的每一个数据 m=20,n=30,b 中的每一个数据都需要计算 m 次乘法,计算完之后如果有 bias 需要额外计算 m 次加法,输出维度为 n,所以一共需要计算 mn 次乘法和 mn 次加法,即 Flops:\(mn\),算上 batch 为\(bmn\)

2.3 归一化

假设输出维度为 m,Batch 为 b

归一化层有可学习的参数\(\alpha\)和\(\beta\),各有 m 次乘加操作,所以 Flops:\(m\),算上 batch 为\(bm\)

3. 计算的模块

3.1 torchsummary 模块

pip install torchsummary

from torchsummary import summary
summary(model, (3, 224, 224))

3.2 flops_counter 模块

GitHub 地址:https://github.com/sovrasov/flops-counter.pytorch

pip install ptflops

from ptflops import get_model_complexity_info
flops, params = get_model_complexity_info(model, (3, 224, 224), as_strings=True, print_per_layer_stat=True)
Sep 06, 2026