RNN 的图形使用模式
Graph usage pattern for RNNs
我对默认图表中 tensors/ops/variables 的生命周期感到困惑。
在 RNN 中,由于输入数据的长度可变,图结构将在每次迭代中发生变化。因此,是否应该在每次训练迭代中使用单独的图 created/destroyed 以适应图的不断变化的结构,还是有办法坚持使用默认图?
另外,如果构建新的图,它们如何共享变量?
具体对于 RNN,有两个选项:tf.nn.rnn
和 tf.nn.dynamic_rnn
。没有人临时创建或销毁图形。
第一个函数创建 T
个子图,其中 T
是您提供的 python 输入列表的长度(即,输入是一个 len T
python 形状列表 [batch, depth]
张量)。 tf.nn.rnn
总是需要固定数量的时间步长。请注意,您可以通过传递 sequence_length
参数来控制给定步骤的 哪些 子图 运行;该函数然后使用条件评估 (tf.cond
) 来确定哪些操作获得 运行.
相比之下,dynamic_rnn
使用特殊的 TensorFlow while 循环和其他技巧,在图形结构中引入有限类型的循环。在这种情况下,"time step" 正好有一个子图,它会一遍又一遍地得到 运行,直到您的输入被处理。在这种情况下,您的输入是一个 3D
张量,尺寸为 [batch, time, depth]
(如果您设置 time_major=True
,它可以是 [time, batch, depth]
);前两个维度可能因步骤而异。
我对默认图表中 tensors/ops/variables 的生命周期感到困惑。
在 RNN 中,由于输入数据的长度可变,图结构将在每次迭代中发生变化。因此,是否应该在每次训练迭代中使用单独的图 created/destroyed 以适应图的不断变化的结构,还是有办法坚持使用默认图?
另外,如果构建新的图,它们如何共享变量?
具体对于 RNN,有两个选项:tf.nn.rnn
和 tf.nn.dynamic_rnn
。没有人临时创建或销毁图形。
第一个函数创建 T
个子图,其中 T
是您提供的 python 输入列表的长度(即,输入是一个 len T
python 形状列表 [batch, depth]
张量)。 tf.nn.rnn
总是需要固定数量的时间步长。请注意,您可以通过传递 sequence_length
参数来控制给定步骤的 哪些 子图 运行;该函数然后使用条件评估 (tf.cond
) 来确定哪些操作获得 运行.
相比之下,dynamic_rnn
使用特殊的 TensorFlow while 循环和其他技巧,在图形结构中引入有限类型的循环。在这种情况下,"time step" 正好有一个子图,它会一遍又一遍地得到 运行,直到您的输入被处理。在这种情况下,您的输入是一个 3D
张量,尺寸为 [batch, time, depth]
(如果您设置 time_major=True
,它可以是 [time, batch, depth]
);前两个维度可能因步骤而异。