【问题标题】:Canonical Tensorflow "for loop"规范张量流“for循环”
【发布时间】:2018-01-23 07:48:05
【问题描述】:

运行 Tensorflow“for 循环”的规范方式是什么?

具体来说,假设我们有一些不依赖循环迭代的body 函数,但必须运行n 次。

有人可能认为一个好的方法可能是在 tf.while_loop 中运行它,如下所示:

def body(x):
    return ...

def while_body(i,x):
    return i+1, body(x) 

i, x = tf.while_loop(lambda i: tf.less(i, n), while_body, [tf.constant(0),x])

事实上,这正是这个问题中评分最高的答案所暗示的:

How can I run a loop with a tensor as its range? (in tensorflow)

不过tf.while_loop docs特意说

对于正确的程序,对于任何大于 0 的并行迭代,while_loop 应该返回相同的结果。

如果你在正文中放置一个计数器,那么似乎违反了该条件。因此,似乎必须有一种不同的方式来设置“for循环”。

此外,即使没有明确的错误,这样做似乎也会在迭代之间产生依赖关系,这意味着我认为它们不会并行运行。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    经过一番调查,似乎上面使用的tf.while_loop 成语很常见。或者,可以使用tf.scan

    def body( x ):
        return ...
    
    def scan_body( previous_output, iteration ):
        return body( ... )
    
    x = tf.scan( scan_body, tf.range(n), initializer = [x] )
    

    虽然我不知道从性能的角度来看是否更可取。注意上面我们必须包装body函数来接受之前的输出。

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 2016-12-06
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 2020-10-08
      • 2018-07-15
      • 1970-01-01
      相关资源
      最近更新 更多