最近我使用tf.profile来计算ResNet-v1-50的FLOP。我得到7084572224(7.08 GFLOP?但在原始论文中,它是3.8 GFLOP。
我在 VGG-19 上的表现相同并获得了5628853928(56.29 GFLOP?(,但它的实际价值是 196 亿 FLOP。 请注意,所有测试模型都在 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)
请有人帮助我。
根据原始论文 https://arxiv.org/pdf/1512.03385.pdf 第 3 页的最后 2 行,他们的计算只考虑乘法和加法运算。而张量流进一步包括池化的批量范数或最大运算,relu。我认为这就是差异的原因。