与标题一样,为什么乘法比本例中的减法要快得多?
在这个例子中,我们有M = 784个输入和N = 100个输出,因此矩阵乘法需要MxN标量乘法和(M-1)个xN加法,而减法只需要MxN标量减法。
是否因为软件和硬件在乘法和加法方面进行了大量优化?
或者是因为这里完成的所有形状brodcasting和tensorflow可能效率低下?
所有计算都是在CPU上完成的,所以这可能是另一个领导。
代码如下:
input = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.truncated_normal(shape=[784, 100], mean=0., stddev=.5))
sub = tf.expand_dims(input, axis=2)-tf.expand_dims(W1, axis=0)
mul = tf.matmul(input*W)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
start = timer()
sess.run(diff, {input: somedata}) #somedata has shape (100, 784)
timer() - start #yields around 0.15s after averaging multiple tries
start = timer()
sess.run(mul, {input: somedata})
timer() - start #yields around 0.008s after averaging