在 tensorflow 中创建多层循环神经网络

Posted

技术标签:

【中文标题】在 tensorflow 中创建多层循环神经网络【英文标题】:Creating multi-layer recurrent neural network in tensorflow 【发布时间】:2017-01-06 04:25:18 【问题描述】:

我正在尝试在 tensorflow 中创建一个带有 GRU 单元(以及 LSTM 单元)的多层循环神经网络。我查看了多个来源,包括官方教程。但我一直看到多层 RNN 的以下模式(此处显示为 GRU 单元)。

cell = GRUCell(num_neurons)  # Or LSTMCell(num_neurons)
cell = DropoutWrapper(cell, output_keep_prob=dropout)
cell = MultiRNNCell([cell] * num_layers)

此代码 sn-p 取自 RNN Tensorflow Introduction。我对[cell] * num_layers 的理解是同一个对象cell 在列表中被引用num_layer 次。所以,MultiRNNCell 不会创建一个深度网络,其中每一层的权重与前一层相同。如果有人能澄清这里到底发生了什么,那将是非常有见地的。

【问题讨论】:

最初,是的。 GRU / LSTM 单元的每层权重相同。但是随着神经网络的学习,这些权重应该被更新。这就是为什么当你创建一个堆叠的 RNN (GRU / LSTM) 时,你必须有tf.nn.dynamic_rnn(cell, x, initial_state=Hin)。据我了解,Hin 将携带 GRU / LSTM 单元的状态,这意味着它还具有每层的权重。 【参考方案1】:

我假设您已经充分了解 TensorFlow 的概念和执行模型。如果没有,请查看 tensorflow.org 上的教程,尤其是变量一。

GRUCell 的构造函数不会向 Graph 添加任何节点。只有当您调用实例(即 cell())时,变量和操作才会被添加到图中。当 MultiRNNCell 被调用时,它将在调用子层之前创建不同的变量范围。这样每一层都有自己的变量。

【讨论】:

以上是关于在 tensorflow 中创建多层循环神经网络的主要内容,如果未能解决你的问题,请参考以下文章

双向循环神经网络及TensorFlow实现

尝试在tensorflow中创建OCR,字母训练后怎么办?

Tensorflow系列3:多层神经网络--解决非线性问题

深度学习(08)_RNN-LSTM循环神经网络-03-Tensorflow进阶实现

多层神经网络TensorFlow

3.4RNN 层使用方法