【发布时间】:2016-12-29 20:40:36
【问题描述】:
在 tensorflow 的 dynamic_rnn 函数中,我对输出形状感到惊讶,我希望有人能帮助我提高对 RNN 单元的理解。
例如,如果输入定义为:
x = tf.placeholder(tf.float32, [110, seq_size, input_dim])
其中 seq_size = 5 和 input_dim = 2(即两个时间序列)和 110 是批量大小;并且单元格被定义为,
cell = rnn_cell.BasicLSTMCell(hidden_dim)
其中 hidden_dim = 6
当我创建一个 dynamic_rnn 时
outputs, states = rnn.dynamic_rnn(cell, x, dtype=tf.float32)
并检查输出的大小是 [110 5 6]。这些维度是 seq_size 和 hidden_dim 的批量大小。
问题:
1:这些维度意味着时间序列中每个时间步有 6 个隐藏节点,总共有 30 个隐藏节点 (5 x 6),而不是总共 6 个隐藏节点。这是正确的解释吗?
2:由于我的输入维度是 5 x 2(每个序列 5 个步骤和 2 个序列),张量流如何在每个时间步骤将输入连接到隐藏节点?张量流是否假设在每个隐藏单元之前具有 2 个输入、12 个权重和 6 个偏差的全连接图?还是别的什么?
【问题讨论】:
-
问题1:每个序列有5个隐藏节点,每个隐藏节点对应一个输入/词。问题 2:每个输入都是二维空间中的一个向量(以您的示例为例)。
-
不理解数字1的答案。我原本也是这么想的,每个单词/输入都会有一个隐藏节点,但上面输出的维度似乎表明情况并非如此.在上面的例子中,每个批次元素都有 [1 5 6],所以有 30 个输出。此外,隐藏节点的数量是 Cell 的自变量,如github.com/aymericdamien/TensorFlow-Examples/blob/master/… 等示例所示。
-
我认为 [1 5 6] 表示有 5 个输出,每个输出是一个 6 维向量。你提供了 [1 5 2],意思是 5 个输入,每个输入都是一个二维向量。
-
我明白了。看看方程式,我想我明白你在说什么。 H(t) = f(Winx(t)+WhH(t-1))。我原本以为 x 是 5 x 2,当我指定隐藏单元格的数量时,我指定了 W 的行空间,即 6 x 5,这将导致 6 x 2 输出,但是,看来你说 x 是 2 x 5,而 Win 是 6 x 2,这导致 6 x 5 输出。
标签: tensorflow recurrent-neural-network