在 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 中创建多层循环神经网络的主要内容,如果未能解决你的问题,请参考以下文章