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

问题描述 投票:0回答:1

我想使用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)

我打印“状态”(和输出),我希望“状态”具有形状[输入序列的数量,x],其中x是每个输入序列的长度。但是,当我打印“状态”(或“输出”)时,它们都具有[输入序列的数量,n_hidden]的形状,其中n_hidden是特征的隐藏层数。

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

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

Figure 1

python tensorflow deep-learning lstm recurrent-neural-network
1个回答
1
投票

那太可疑了。

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

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

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

对于架构问题。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.