tensorflowtf.profile计算的FLOPs是多少?

What is FLOPs calculated by tensorflow tf.profile?

最近我使用 tf.profile 来计算 ResNet-v1-50 的 FLOPs。我得到 7084572224(7.08 GFLOPs?)。但在原始论文中是 3.8 GFLOPs。

我在 VGG-19 上执行相同的操作并得到 5628853928(56.29 GFLOPs?),但它的实际值为 196 亿 FLOPs。 请注意,所有测试模型都在 tf.slim.

我的代码如下:

run_meta = tf.RunMetadata()
im = tf.placeholder(tf.float32, [1, 224, 224, 3])
with arg_scope(resnet_v1.resnet_arg_scope(use_batch_norm=True)):
    ims, endpoints = resnet_v1.resnet_v1_50(im)

print(get_num_of_params(tf.get_default_graph()))
opts = tf.profiler.ProfileOptionBuilder.float_operation()
flops = tf.profiler.profile(tf.get_default_graph(), run_meta=run_meta, cmd='op', options=opts)
print(flops.total_float_ops)

请有人帮助我。

根据原论文第3页最后2行https://arxiv.org/pdf/1512.03385.pdf,他们的计算只考虑了乘加运算。而 tensorflow 进一步包括 batch norm 或池化的最大操作,relu。我认为这就是差异的原因。