TensorFlow的tf.nn.dynamic_rnn运算符的输入张量是如何构造的?

时间:2016-06-29 22:37:12

标签: tensorflow recurrent-neural-network

我正在尝试使用tf.nn.dynamic_rnn图形操作在TensorFlow 0.9.0中使用单词嵌入和递归神经网络编写语言模型,但我不明白input张量是如何结构

我们说我有一个 n 字的语料库。我将每个单词嵌入长度 e 的向量中,我希望我的RNN能够展开 t 时间步长。假设我使用默认的time_major = False参数,我的input张量[batch_size, max_time, input_size]会有什么形状?

也许一个特定的小例子会让这个问题更加清晰。假设我有一个由 n = 8 字组成的语料库,看起来像这样。

1, 2, 3, 3, 2, 1, 1, 2

假设我将其嵌入到大小为 e = 3 的向量中,嵌入1 - > [10,10,10],2 - > [20,20,20]和3 - > [30,30,30],我的input张量会是什么样的?

我已阅读TensorFlow Recurrent Neural Network tutorial,但未使用tf.nn.dynamic_rnn。我还阅读了tf.nn.dynamic_rnn的文档,但发现它令人困惑。特别是我不确定" max_time"和" input_size"这意味着。

任何人都可以用 n t e 和/或来赋予input张量的形状使用我描述的小型语料库中的数据初始化张量的示例?

TensorFlow 0.9.0,Python 3.5.1,OS X 10.11.5

1 个答案:

答案 0 :(得分:3)

在您的情况下,它看起来像batch_size = 1,因为您正在查看一个示例。因此,max_timen=8input_size为输入深度,在您的情况下为e=3。因此,您需要构造一个input张量,其形状为[1, 8, 3]。它是batch_major,因此第一个维度(批量维度)是1。如果你说同时有另一个输入,用n=6个单词,那么你可以通过将第二个例子填充到8个单词(通过填充最后两个单词嵌入的零)来组合这两个输入。并且您的inputs大小为[2, 8, 3]