在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 by hidden_dim的批量大小。
问题:
1:这些维度意味着时间序列中每个时间步有6个隐藏节点,总共30个隐藏节点(5 x 6),而不是总共6个隐藏节点。这是正确的解释吗?
2:由于我的输入维度是5 x 2(每个序列中有5个步骤和2个序列),在每个时间步长将输入连接到隐藏节点的张量流如何?张量流是否假设一个完全连通的图形,在每个隐藏单元格之前有2个输入,12个权重和6个偏差?或其他什么?
答案 0 :(得分:1)
您可以将序列视为句子,将输入视为单词。序列长度是句子中的单词数,也是LSTM中隐藏节点的数量;每个输入/字对应于一个隐藏节点,该节点将输入映射到一个输出。这就是输出数量为seq_size(5)的原因。
单词是一个矢量,位于多维空间中,其维数为input_dim。在LSTM中,单词从此输入空间映射到维度数为hidden_dim的更高维空间。这就是为什么每个输出的大小是hidden_dim(6)。
我相信时代是这次讨论的一个无关紧要的概念。请参阅The meaning of batch_size in ptb_word_lm (LSTM model of tensorflow)