受此question的启发,我试图测量矩阵矩阵乘法的tensorflow所需的FLOPS。
对于分别具有大小(m×p)和(p×n)的两个矩阵A和B,得到的矩阵C =具有大小(m×n)的AB具有mn个条目。对于每个条目,需要p乘法和(p-1)求和。因此,操作总数为mn(2p-1)
。
使用链接的问题/答案中的代码,tensorflow输出m*n*2p
,请参阅下面的代码。
为什么返回这个近似值而不是理论值?在最坏的情况下,p = 1,这个近似值比正确值大2倍。
import numpy as np
import tensorflow as tf
g = tf.Graph()
run_meta = tf.RunMetadata()
with g.as_default():
A=tf.convert_to_tensor(np.random.rand(13,9))
B=tf.convert_to_tensor(np.random.rand(9,7))
C = tf.matmul(A,B) # shape=[13,7]
opts = tf.profiler.ProfileOptionBuilder.float_operation()
flops = tf.profiler.profile(g, run_meta=run_meta, cmd='op', options
=opts)
if flops is not None:
print('Flops should be ', 13*7*(2*9-1))
print('Approximation 2*13*7*9=',2*13*7*9)
print('TF stats gives',flops.total_float_ops)
#Output:
#Flops should be 1547
#Approximation 2*13*7*9= 1638
#TF stats gives 1638