如何将static_rnn输入转换为tensorflow中的dynamic_rnn输入?
问题描述:
我无法理解tensorflow的输入参数dynamic_rnn
。如果我能理解如何将static_rnn
输入转换为dynamic_rnn
输入,它会有很大帮助。如何将static_rnn输入转换为tensorflow中的dynamic_rnn输入?
对于static_rnn
,输入应该是张量,其形状是[batch_size, input_size]
,其中T
为序列长度的长度T
列表。这对我有意义。
对于dynamic_rnn
,输入应该是形状为[batch_size, max_time, ...]
的张量。我不明白如何在这里纳入input_size
。更一般地说,我不知道你可以在省略号中加入什么。
举例来说,我的数据由50个字符长的句子组成,所以input_size
是字母表中的字母数。对于static_rnn
,我会做一个长度为50的张量列表,其形状为[batch_size, input_size]
。我该如何将张量列表转换为单张量,以便我可以将它提供给dynamic_rnn
?
答
您的dynamic_rnn
输入应该是[batch_size, sequence_length, input_size]
的形状。
基本上张量表示的是batch_size
长度为sequence_length
的例子,剩下的省略号就是单个序列元素的形状。
的事情是,与dynamic_rnn
你不需要知道sequence_length事前,所以你输入的占位符可能看起来像
x = tf.placeholder(tf.int32, shape=(batch_size, None, input_size))
这进来非常方便。此外,单个批次中的示例可以具有不同的长度(但必须填充相同长度),但您必须将参数sequence_length
传递给dynamic_rnn
,以便知道何时停止每个示例的计算。