代码之家  ›  专栏  ›  技术社区  ›  desert_ranger

Tensorflow的while循环比传统的while循环慢

  •  0
  • desert_ranger  · 技术社区  · 5 年前

    下面是一个常规的while循环,它执行一个基本的add操作-

    import time
    def check(a,b):
     while(a<b):
        a += 1
     return [a,b]
    
    a = 1
    b = 1500000
    start = time.time()
    check(a,b)
    print("Time = ",time.time() - start)
    
    Time =  0.07060480117797852
    

    下面是使用Tensorflow的优化代码-

    import tensorflow as tf
    def cond(t1, t2):
        return tf.less(t1, t2)
    
    def body(t1, t2):
        return [tf.add(t1, 1), t2]
    
    t1 = tf.constant(1)
    t2 = tf.constant(1500000)
    
    start = time.time()
    res = tf.while_loop(cond, body, [t1, t2], parallel_iterations = 10)
    print("Time = ",time.time() - start)
    
    Time =  22.1693217754364
    

    0 回复  |  直到 5 年前
        1
  •  1
  •   CrazyBrazilian    5 年前

    您不能期望tf.while\u循环比简单的python循环更快,例如

    for( int i=0; i<1500000; i++)
       j=j+1;
    

    在python、javaScript、c等语言中总是表现得更好。

    tensorflow针对矩阵运算而不是简单循环进行了高度优化。

    一种更为紧张的流动方式是

    t1 = tf.constant(1)
    t2 = tf.constant(1500000)
    start = time.time()
    t3 = t1 + t2
    print("Time = ",time.time() - start)
    

    时间=0.001000165939310547

    同样,tf是线性代数运算的框架。如果您试图将其用作通用语言框架,它将不会起到很好的作用。

    我想我以前在这里见过你:-D新年快乐!