在推理过程中正确使用tf.while_loop?

时间:2018-07-07 05:13:19

标签: python tensorflow

是否可以使用DOMException: play() failed because the user didn't interact with the document first. tf.TensorArray's的正文中进行读写,但是 not 不能全部通过tf.while_loop? >

我想将loop_vars用作WaveNet声音生成图的一部分,WaveNet声音生成是一种顺序生成机制,可以根据先前生成的幅度窗口生成下一个振幅值。但是,我只想在推断过程中使用它,因此不需要渐变,因此会使用tf.while_loop进行调用。

除此之外,循环back_prop=False函数必须读取和写入必须在各个时间步中记住的中间值。

看来body是以此方式读取和写入值的唯一选项,但是我注意到tf.TensorArray返回了一个新的tf.TensorArray.write(),它是由正文返回的并在tf.TensorArray参数中使用。这是最好的方法吗?

如果我不需要渐变,是否有更简单的方法来保存循环中的状态?

1 个答案:

答案 0 :(得分:0)

您可以在tf.while中使用tf.assign在全局变量中分配内容。

编辑:您不能使用tf.assign来分配tf.Tensor的切片索引,但是tf.Variable可以使用它。发送到while主体的参数的类型为tf.Tensor,而不是tf.Variable,因此它将不起作用。

这是一些示例代码。

import tensorflow as tf

x = tf.Variable([0,0])
assign_op = tf.assign(x[1],42)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(x)) # [0,0]
    sess.run(assign_op)
    print(sess.run(x)) # [0,42]