首页 文章

关于如何在tensorflow中实现附加的LSTM RNN架构的任何想法?

提问于
浏览
0

我想使用this示例并扩展它以实现下图中的体系结构 . 该代码以下列方式使用BasicLSTMCell和tf.contrib.rnn.BasicLSTMCell:

lstm_cell = tf.contrib.rnn.BasicLSTMCell(n_hidden)
    outputs, states = tf.contrib.rnn.static_rnn(lstm_cell, x, dtype=tf.float32,sequence_length=seqlen)

我打印"states"(和输出),我希望"states"具有形状[输入序列的数量,x],其中x是每个输入序列的长度 . 但是,当我打印"states"(或"outputs")时,它们都具有[输入序列数, n_hidden ]的形状,其中n_hidden是要素的隐藏层数 .

首先,我只打印隐藏状态一段时间(可能是最后一步)而不是 the unrolled RNN ??在RNN处理输入序列的每个时间步之后,如何打印所有隐藏状态(以确保我实现以下架构)?

其次,如何在tensorflow中实现以下架构?假设每个x-i是12位二进制向量,并且每个输入序列包括最多80个向量 . 每个输入序列与输出序列配对,目标是通过查看它们的相关输入序列来预测这些输出序列 .

Figure 1

1 回答

  • 1

    那太可疑了 .

    static_rnn的返回应该是所有输出和最终状态(link) .

    因此,查看输出应该是len seqlen的列表,每个条目都是批次X n_hidden .

    使用tf.nn.static_state_saving_rnn保存所有中间状态,然后像模型中的任何其他张量一样打印它们 .

    对于架构问题 .

    如果您应该在每次输入后返回输出,则获取输出并应用损失使它们看起来像您拥有的标签 .

    如果您应该查看整个序列然后提出输出,那么您需要两个rnn系统 . 你应该有一个编码rnn,就像你已经拥有的那样 . 我们忽略了这部分的输出 . 然后你采取最终状态,并将其提供给解码rnn . 这个没有任何输入 . 我们采用解码rnn的输出并应用损失使它们看起来像标签 .

    一如既往,您应该尝试各种设置,不同的图层大小,不同的层数等...并选择最佳设置 .

相关问题