Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TensorFlow vs.Theano性能_Python_Performance_Tensorflow_Theano - Fatal编程技术网

Python TensorFlow vs.Theano性能

Python TensorFlow vs.Theano性能,python,performance,tensorflow,theano,Python,Performance,Tensorflow,Theano,在一些神经网络研究的背景下,我正在评估几种方法,以了解如何实现这些方法或使用什么库。目前我正在比较Tensorflow和Theano,我正在努力获得 TenorFlow要表现得很好。这是我的简单Hello梯度基准测试,它只优化了一个系数的标量乘法 import time class Timer: def __init__(self, what): self.what = what def __enter__(self): self.t1 = time.t

在一些神经网络研究的背景下,我正在评估几种方法,以了解如何实现这些方法或使用什么库。目前我正在比较Tensorflow和Theano,我正在努力获得 TenorFlow要表现得很好。这是我的简单Hello梯度基准测试,它只优化了一个系数的标量乘法

import time

class Timer:

   def __init__(self, what):
      self.what = what

   def __enter__(self):
      self.t1 = time.time()
      return self

   def __exit__(self,t,v,tb):
      t2 = time.time()
      print("{0} runs {1:.4f} seconds".format(self.what, t2-self.t1))


def run_tensorflow():

   import tensorflow as tf

   x = tf.placeholder(tf.float32)
   y = tf.placeholder(tf.float32)
   a = tf.Variable([1.], tf.float32)

   sess = tf.Session()
   sess.run(tf.global_variables_initializer())

   loss = (y-a*x)**2
   step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

   def one_step():
      sess.run(step, {x:1.,y:0.})

   with Timer('tensorflow') as t:
      result = [ one_step() for n in range(1000) ]


def run_theano():

   import theano as th

   x = th.tensor.dscalar()
   y = th.tensor.dscalar()
   a = th.tensor.dscalar()
   l = a*x

   loss = (y-l)**2
   dloss = th.tensor.grad(loss, a)
   dloss_f = th.function([x,y,a], dloss)

   a = [1.]

   def one_step():
      a[0] -= 0.01 * dloss_f(1.,0.,a[0])

   with Timer('theano') as t:
      result = [ one_step() for n in range(1000) ]


run_tensorflow()
run_theano()
我在CPU上运行这个程序,程序包通过pip安装。TensorFlow和Theano的运行时间分别为0.36秒和0.043秒。我在实际网络中看到了类似的性能差异,其中矩阵乘法开销占主导地位,但TensorFlow的速度明显较慢

我想知道我是否错误地使用了Tensorflow来完成我要做的事情。我不应该在循环中调用run方法吗

TF和Theano设计用于处理大约1M个元素的大型对象。基准测试他们对标量的处理并不是特别相关

这是一个苹果对桔子的比较:使用TF,您可以同时计时编译和运行时,而在Theano中,您只能计时运行时!这是因为当您调用theano.function时,它会执行所有编译。在TF中,大部分工作都转移到您第一次调用sess.run时


也就是说,当TF比Theano慢时,也存在一些现实情况。

在开始之前,先了解一下我是否知道我在说什么:谢谢你给出了一些建设性的答案。正如我在问题中提到的,我用大矩阵做了一些测试,但也看到了类似的结果。我现在搬到了凯拉斯。两个有趣的观察结果:1相同的示例简单稠密神经网络比我手写的theano和tensorflow代码快得多。2如果我比较theano和tensorflow的后端,theano会赢,在某些情况下会戏剧性地赢。我找不到任何一个例子,即张量流量等于或甚至更快。所以我假设它至少在CPU上更慢。顺便说一句,TF中的矩阵性能应该接近理论最大值,在Titan X上为11 T/sec,在Xeon V3上为1 T/sec,这是您可以使用的基准测试-