【发布时间】:2019-10-02 14:33:54
【问题描述】:
我目前正在尝试在 Tensorflow 中编写一些线性代数代码,并将性能与 numpy 实现进行比较。我遇到的问题是,对于重复矩阵向量乘法或重复矩阵矩阵乘法,Tensorflow 代码要慢几个数量级。我目前正在使用 CPU 测试没有 GPU 的 Tensorflow。我的目的是在 Tensorflow 中实现我的项目,使其在 CPU 和 GPU 上都可以快速运行,具体取决于用户可用的资源。矩阵大小可以在大约 10x10 到非常大的矩阵之间变化。当使用 tensorflow 来拥有一个通用代码库时,我愿意接受小矩阵的一点性能损失,只要它不像下面那样剧烈。
这里有两个来自 IPython 的计时示例:
%%timeit
dim = 10000
m1 = np.random.uniform(dim)
m2 = np.random.uniform(dim,dim)
tmp = np.dot(m2,m1)
for i in range(200):
tmp = np.dot(m2,tmp)
这需要 151 µs ± 6.56 µs。
现在使用 TensorFlow:
%%timeit
a1 = tf.random.uniform([dim,dim])
a2 = tf.random.uniform([dim])
tmp = tf.tensordot(a1,a2,1)
for i in range(200):
tmp = tf.tensordot(a1,tmp,1)
仅需要 1.07 秒 ± 128 毫秒。然后再次评估需要 7.5 秒。
sess = tf.Session()
with sess.as_default():
out = tmp.eval()
我在使用 matmul 时观察到了同样的趋势。
非常感谢您的任何提示!
彼得
【问题讨论】:
标签: python performance numpy tensorflow