面试宝典笔记:卷积计算过程中的FLOPs

在这里插入图片描述
模型的运算次数,可用 FLOPs衡量,也就是浮点运算次数(FLoating-point OPerations),表征的是模型的时间复杂度。模型空间复杂度通过Parameters反映,即模型的参数量。
最早是在2017年ICLR会议上由英伟达公司提出FLOPs的计算:从这张图中可以看出,随着模型层数不断加深,相应的flops增大,时间复杂度提高,但模型的验证集的错误率在不断减小。因此我们希望在模型加深获得更高精度的前提下尽可能减少模型的时间复杂度,加快模型的训练和预测时间。

单个卷积核的时间复杂度

Flops~O(M * M * K * K * Cin * Cout)
M为每个卷积核输出特征图(Feature Map)的长宽,输出特征图尺寸由输入特征图尺寸X,卷积核尺寸K,填充层Padding,步长stride四个参数决定,公式表示为:
在这里插入图片描述

K为每个卷积核(kernel size)的大小
IC为输入通道数,OC为输出通道数

注1:为了简化表达式中的变量个数,这里统一假设输入和卷积核的形状都是正方形。
注2:严格来讲每层应该还包含 1 个 bias参数,为了简洁就省略了。

模型整体时间复杂度

在这里插入图片描述
D为模型全部卷积层数
依据层内相乘,层间相加的准则,将其累计起来就是整个模型所有卷积层的时间复杂度。
除此之外。模型的其它层结构(激活函数层,上下采样,batch normalization,池化层等)同样具有时间复杂度,只不过整体来看卷积层所占比重最大。

常用计算FLOPs的工具

1 stat打印

import torch
import torch.nn as nn
from torchstat import stat

class Net(nn.Module):
 def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值