【发布时间】: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 单元的状态,这意味着它还具有每层的权重。
标签: tensorflow recurrent-neural-network lstm gated-recurrent-unit