2

私は、テンソルフローのGRUユニット(LSTMユニットでもよい)を備えた多層リカレントニューラルネットワークを作成しようとしています。私は公式のチュートリアルを含む複数のソースを見てきました。しかし、私は多層RNN(GRUユニットでここに示されている)のために次のパターンを見ています。テンソルフローにおける多層リカレントニューラルネットワークの作成

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

このコードスニペットはRNN Tensorflow Introductionです。 [cell] * num_layersの私の理解は、同じオブジェクトcellがリスト内でnum_layer回参照されるということです。したがって、MultiRNNCellは、各レイヤーが以前のレイヤーと同じウェイトを持つディープネットワークを作成しません。誰かがここで何が起こっているのかを明確にすることができれば、非常に洞察力があるでしょう。

+0

最初は、はい。ウェイトは、GRU/LSTMユニットのレイヤーごとに同じです。しかし、ニューラルネットが学習すると、それらの重みが更新される。そのため、スタックされたRNN(GRU/LSTM)を作成するときは、 'tf.nn.dynamic_rnn(cell、x、initial_state = Hin)'を設定する必要があります。私が理解しているところから、 'Hin'はGRU/LSTMユニットの状態を運ぶでしょう。つまり、層ごとの重みもあります。 –

答えて

2

TensorFlowのコンセプトと実行モデルはすでによく理解していることを前提としています。そうでない場合は、tensorflow.orgのチュートリアル、特に変数1を確認してください。

GRUCellのコンストラクタは、ノードをグラフに追加しません。インスタンス(つまりcell())を呼び出した場合にのみ、変数と演算がグラフに追加されます。 MultiRNNCellが呼び出されると、サブレイヤを呼び出す前に、異なる変数スコープが作成されます。このように、各レイヤーには独自の変数があります。

関連する問題