网络参数和Flops计算
网络参数和Flops计算
- 网络参数计算
- 1. 卷积层
- 2. 线性层
- 3. 归一化层
- Flops
- 1. 卷积层
- 2. 线性层
- 3. 归一化
- 计算的模块
网络参数计算
1. 卷积层
假设输入维度为m,输出维度为n,卷积核大小为(k, k)
- bias=True: 一个卷积核含有的参数为 m k 2 mk^{2} mk2,有n个卷积核,所以总参数为 m n k 2 + n mnk^{2}+n mnk2+n
- bias=False: 没有bias时,不需要加上最后的n,总参数为 m n k 2 mnk^{2} mnk2
nn.Conv2d(3, 20, (3, 3), stride=1, padding=1)
bias默认为True
上述参数为 2 × 3 2 × 20 + 20 = 560 2\times 3^{2}\times 20+20=560 2×32×20+20=560,如果设置bias=False就是540
2. 线性层
假设输入维度为m,输出维度为n
- bias=True: 输入为m,输出为n,参数为 m n + n mn+n mn+n
- bias=False: 没有bias时,不需要加上最后的n,总参数为 m n mn mn
nn.Linear(3, 20, bias=True)
bias默认为True
上述参数为 3 × 20 + 20 = 80 3\times 20+20=80 3×20+20=80,如果设置bias=False就是60
3. 归一化层
假设输入维度为m
- affine=True: 有两个可学习的参数 α \alpha α和 β \beta β,参数2m
- affine=False: 没有参数,0
nn.BatchNorm2d(20, affine=True)
affine默认为True
上述参数为 2 × 20 = 40 2\times 20=40 2×20=40,如果affine=False为0
Flops
Flops的运算为:一次乘加运算为一次Flops
1. 卷积层
假设输入维度为m,输出维度为n,卷积核大小为(k, k),输出特征图的尺寸为(H,W)
一个卷积核每进行一次卷积所需要乘法是 m k 2 mk^{2} mk2,加法 m ( k 2 − 1 ) + ( m − 1 ) = m k 2 − 1 m(k^{2}-1)+(m-1)=mk^{2}-1 m(k2−1)+(m−1)=mk2−1,所以一个卷积核的计算量为 m k 2 mk^{2} mk2(忽略掉那-1的运算,乘加就相等了),输出的特征图为HW,输出channel为n,所以总共的Flops为: H W n × m k 2 HWn\times mk^{2} HWn×mk2
2. 线性层
假设输入维度为m,输出维度为n,batch为b
从下图可以看出b=128,我们先不管这个参数,他的每一个数据m=20,n=30,b中的每一个数据都需要计算m次乘法,计算完之后如果有bias需要额外计算m次加法,输出维度为n,所以一共需要计算mn次乘法和mn次加法,即Flops: m n mn mn,算上batch为 b m n bmn bmn
3. 归一化
假设输出维度为m,Batch为b
归一化层有可学习的参数 α 和 β \alpha和\beta α和β,各有m次乘加操作,所以Flops: m m m,算上batch为 b m bm bm
计算的模块
torchsummary模块
pip install torchsummary
from torchsummary import summary
summary(model, (3, 224, 224))
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)
网络参数和Flops计算相关推荐
- Pytorch统计网络参数计算工具、模型 FLOPs, MACs, MAdds 关系
Pytorch统计网络参数 #网络参数数量 def get_parameter_number(net):total_num = sum(p.numel() for p in net.parameter ...
- 卷积层计算量(FLOPS)和参数量的计算
1.卷积参数量的计算,若卷积层的输入featuremap的维度为Cin×Hin×Win,卷积核的大小为K1×K2, padding=P1×P2, stride=S1×S2,卷积核(filter)的数量 ...
- pytorch 模型可视化_PyTorch Tips(FLOPs计算/参数量/计算图可视化/相关性分析)
最近在做Research Project的时候,发现有些小工具很好用,记录在此. 1. 准确的FLOPS 计算 网上开源的很多计算flops的工具只支持计算PyTorch内置层的flops,不能有效计 ...
- 卷积核大小对网络参数和计算量的影响
下面展示了同一尺寸图像经过不同尺寸卷积核得到相同尺寸featuremap的过程,以及不同的参数量和计算量(这里不包含偏置): 一般卷积核的深度与上层featuremap深度(featuremap数)相 ...
- PyTorch中CNN网络参数计算和模型文件大小预估
前言 在深度学习CNN构建过程中,网络的参数量是一个需要考虑的问题.太深的网络或是太大的卷积核.太多的特征图通道数都会导致网络参数量上升.写出的模型文件也会很大.所以提前计算网络参数和预估模型文件大小 ...
- CNN中parameters和FLOPs计算
CNN中parameters和FLOPs计算 以AlexNet为例,先注意观察每层编注的通道数的变化. 1. 卷积网络的参数量的计算(parameters) CNN中的parameters分为两种:W ...
- 使用pytorch构建一个神经网络、损失函数、反向传播、更新网络参数
关于torch.nn: 使用Pytorch来构建神经网络, 主要的工具都在torch.nn包中. nn依赖于autograd来定义模型, 并对其自动求导. 构建神经网络的典型流程: 定义一个拥有可学习 ...
- 神经网络中参数量parameters和FLOPs计算
一.神经网络中参数量parameters和FLOPs计算 CNN中的parameters分为两种:W和b,对于某一个卷积层,它的parameters的个数为: (Kh∗Kw∗Cin)∗Cout+Cou ...
- 神经网络参数量的计算:以UNet为例
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:Hello王叔叔 知乎链接:https://zhuanlan.zhihu.c ...
最新文章
- 2020年中国智慧城市发展值得关注的技术
- 阻塞 、非阻塞;同步、异步
- nginx服务器带宽_Nginx限制带宽配置示例
- 使用 case when进行行列转换
- Java.lang.IllegalStateException Activity has been destroyed
- 网格自适应_ANSYS 非线性自适应(NLAD)网格划分及应用举例
- 求解非线性方程f (x)= 0的MATLAB数值法指令介绍(solve、fzero的方法与实例)
- admin客户管理系统html5模板
- java中hashcode和equals的区别和联系
- 推荐:安全公司的一些面试题
- QT学习之做一个简易图片处理器(后续补全)
- springboot整合J2cache简单使用
- 【CS106】编译原理笔记4 —— 用普遍性泵引理(Pumping lemma)证明语言的正则性
- css样式的灵异事件
- Could not retrieve transation read-only status server 的解决办法
- Ubuntu 20.04系统中Sage(sagemath)安装及使用详细过程
- 网络OSI(七层模型)
- Python virtualenv工具设置虚拟环境和VS code调试Python
- 用python做视觉检测系统_教你用 Python 做一个物体检测系统
- Libc堆管理机制及漏洞利用技术(一)