我对默认图表中的张量/操作/变量的生命周期感到困惑。
在RNN中,由于输入数据的长度可变,图形结构将在每次迭代时发生变化。是否应该在每次训练迭代中创建/销毁单独的图形以适应图形的变化结构,或者是否有办法坚持使用默认图形?
另外,如果构建新图表,他们如何共享变量?
答案 0 :(得分:1)
对于RNN,有两种选择:tf.nn.rnn
和tf.nn.dynamic_rnn
。暂时不会创建或销毁图形。
第一个函数创建T
个子图,其中T
是你提供的python输入列表的长度(也就是说,输入是一个len T
python形状列表{{ 1}}张量)。 [batch, depth]
始终需要固定数量的时间步长。注意,您可以通过传递tf.nn.rnn
参数来控制为给定步骤运行哪些子图;然后,该函数使用条件评估(sequence_length
)来确定要运行的操作。
相比之下,tf.cond
使用特殊的TensorFlow while循环和其他技巧,在图结构中引入了有限类型的循环。在这种情况下,“时间步长”只有一个子图,它会一直反复运行,直到您的输入被处理完毕。在这种情况下,您的输入是dynamic_rnn
张量,其尺寸为3D
(如果您设置[batch, time, depth]
,则可以为[time, batch, depth]
);前两个维度可能因步骤而异。