计算模型的FLOPs

本文探讨了模型运行时间的衡量标准,尤其是浮点运算次数(FLOPs)。在TF框架下,虽然参数量易于计算,但FLOPs更能反映模型的latency。由于官方接口无法准确获取FLOPs,作者决定手动计算。文章详细介绍了如何为不同类型的层(如Conv2D, Depthwise Conv2D, Dense)计算FLOPs,并提供了计算公式。通过对模型结构的分析,得出每个层的FLOPs,以便理解模型的计算复杂度。" 126128457,8753399,Python实现Alternative List Arrange算法,"['开发语言', 'Python', '算法', '数据结构']
摘要由CSDN通过智能技术生成

为了探究影响模型运行时间的变量,之前运用了参数量做标准

参数量在TF框架下还是很容易计算的

TF框架下运用

tf.keras.models.Model().summary()

就能一键生成包含模型的layers,output,parameters的报告

在这里插入图片描述

为了探究其他标准用于反映模型的运行时间,我们在网上找到了三个标准:

参数量(parameters)
浮点运算次数(FLOPs)
内存访问次数(MAC)

这次我们就来探究FLOPs对模型latency的影响

一上来先踩坑

TF2.X取消了Profiler接口对于FLOPs的统计

即使通过网上给的TF1.X接口再用TF2.X compat.v1接口依然不能成功返回FLOPs的值

于是只能写个程序硬算

FLOPs本质上是模型中的乘法和加法运算,

模型里面的layers有:

Input layer

Zero Padding layer

Conv2D

BatchNormalization

Activation

Depthwise conv2D

Dense

其中因为浮点运算次数很少而可以忽略不记的layers:

Input,

zero padding,

BatchNormalization,

Activation

剩下需要计算的layers就是:

Conv2D,

Depthwise Conv2D,

Dense

Conv2D:

F L O P s = C i n ∗ K ∗ K ∗ H ∗ W ∗ C o u t FLOPs=Cin*K*K*H*W*Cout FLOPs=CinKKHWCout

Cin是输入的channel

K*K是kernel size

H*W是输出size

Cout是输出channel

Depthwise Conv2D:

F L O P s = C i n ∗ H ∗ W ∗ K ∗ K / S / S FLOPs=Cin*H*W*K*K/S/S FLOPs=CinHWKK/S/S

Cin是输入的channel

K*K是kernel size

H*W是输入size

S*S是strides

Dense:

F L O P s = 2 ∗ C i n ∗ C o u

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值