【问题标题】:How is this function programatically building a LSTM这个函数如何以编程方式构建 LSTM
【发布时间】:2017-07-14 19:52:25
【问题描述】:

代码如下:

def lstm(o, i, state): 
    #these are all calculated seperately, no overlap until....
    #(input * input weights) + (output * weights for previous output) + bias
    input_gate = tf.sigmoid(tf.matmul(i, w_ii) + tf.matmul(o,w_io) + b_i)

    #(input * forget weights) + (output * weights for previous output) + bias
    output_gate = tf.sigmoid(tf.matmul(i, w_oi) + tf.matmul(o,w_oo) + b_o)

    #(input * forget weights) + (output * weights for previous output) + bias        
    forget_gate = tf.sigmoid(tf.matmul(i, w_fi) + tf.matmul(o,w_fo) + b_f)

    memory_cell = tf.sigmoid(tf.matmul(i, w_ci) + tf.matmul(o,w_co) + b_c)

    state = forget_gate * state + input_gate * memory_cell

    output = output_gate * tf.tanh(state)

    return output, state

这是lstm的图纸:

我很难理解这两者是如何匹配的。任何帮助将非常感激。

【问题讨论】:

  • 您特别需要帮助解释什么?
  • @JonasAdler 所以,我不确定为什么每个门都有两个权重。此外,c_t 似乎与输入、输出和遗忘门交互,但我在代码中没有看到。

标签: tensorflow neural-network lstm recurrent-neural-network


【解决方案1】:

This 是一篇关于 LSTM 的优秀博文。这段代码直接实现了LSTM;这里的代码等价于Wikipedia:

输入和输出权重反映了网络的状态。在一个简单的全连接 (FC) 层中,我们只有一个权重矩阵,我们将使用它来计算层的输出:

然而,LSTM 的优势在于它包含多个信息源或状态;当我们说 LSTM 有记忆时,这就是我们所指的。我们有输出门,就像 FC 层一样,但我们也有遗忘门、输入门、单元状态和隐藏状态。这些都结合起来提供多种不同的信息来源。这些方程式显示了它们如何结合在一起产生输出。

在方程中,x 是输入,f_t 是输入门。我建议阅读链接的博客文章和 Wikipedia 文章,以了解方程如何实现 LSTM。

图像描述了输入门根据先前单元格的值和输入门的先前值向单元格提供输出。该单元还包含遗忘门;然后将输入馈送到输出门,输出门也将输出门的先前值作为输入。

【讨论】:

  • 很有趣,这是我开始学习 LSTM 时阅读的第一批文章之一。它确实为结构提供了很好的背景,但它没有解释的一点是为什么会有输入和输出权重。这让我有点困惑。
  • 我编辑了我的答案,试图解释更多。基本上,它们是不同的信息来源,具有不同的更新规则。
  • 如果您对答案感到满意,可以点击“接受”吗?
  • 所以,这仍然不能完全回答为什么每个门都有输入和输出权重。我了解每个门的功能,但我不明白为什么每个门中有两个权重。
猜你喜欢
  • 2010-09-10
  • 2012-10-10
  • 2012-07-20
  • 2022-01-10
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
相关资源
最近更新 更多