为了探究影响模型运行时间的变量,之前运用了参数量做标准
参数量在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=Cin∗K∗K∗H∗W∗Cout
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=Cin∗H∗W∗K∗K/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