【问题标题】:Any idea on how to implement the attached LSTM RNN architecture in tensorflow?关于如何在 tensorflow 中实现附加的 LSTM RNN 架构的任何想法?
【发布时间】:2018-09-10 05:37:13
【问题描述】:

我想使用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 个向量。每个输入序列都与一个输出序列配对,目标是通过查看它们的相关输入序列来预测这些输出序列。

【问题讨论】:

    标签: python tensorflow deep-learning lstm recurrent-neural-network


    【解决方案1】:

    这很可疑。

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

    所以查看输出应该是一个 len seqlen 列表,每个条目是一个批次 X n_hidden。

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

    对于架构问题。

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

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

    与往常一样,您应该尝试各种设置、不同的层大小、不同的层数等...并选择最佳设置。

    【讨论】:

    • 感谢您的回复! tf.nn.static_state_saving_rnn 有一个 state_saver 参数。我试图传递一个 tf.train.Saver 对象,但我收到一条错误消息,指出“'Saver' 对象没有属性 'state'”。有关如何使用 static_state_saving_rnn 的任何示例?谢谢!
    • @Sajj 根据您需要传递具有save_statestate 方法的对象的文档。创建一个对象,将参数推送到save_state 上的列表中,并在调用state 时返回最后一个条目。然后,您可以使用包含所有状态的列表来满足您的需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2016-11-21
    • 2011-03-23
    相关资源
    最近更新 更多