web-dev-qa-db-ja.com

tensorflow dynamic_rnnとrnnの違いは何ですか?

tf.nnには、RNNに関連するいくつかのクラスがあります。 Webで見つけた例では、tf.nn.dynamic_rnntf.nn.rnnは同じ意味で使用されているようです。違いはなんですか?

31
Mad Wombat

TensorflowのRNN、実用ガイドおよびドキュメント化されていない機能 Denny Britz著、2016年8月21日発行。

tf.nn.rnnは、固定されたRNN長の展開されたグラフを作成します。つまり、200個のタイムステップを持つ入力でtf.nn.rnnを呼び出すと、200個のRNNステップを持つ静的グラフが作成されます。まず、グラフの作成が遅いです。次に、最初に指定したよりも長いシーケンス(> 200)を渡すことができません。

tf.nn.dynamic_rnnはこれを解決します。 tf.Whileループを使用して、実行時にグラフを動的に構築します。つまり、グラフの作成が高速になり、さまざまなサイズのバッチをフィードできます。

48
Abhishek Mishra

それらはほぼ同じですが、入力と出力の構造に少し違いがあります。ドキュメントから:

tf.nn.dynamic_rnn

この関数は、上記の関数rnnと機能的に同じですが、入力の完全に動的な展開を実行します。

rnnとは異なり、入力入力はPythonフレームごとに1つのテンソルのリストではありません。代わりに、入力は最大時間が最初または2番目の次元(パラメーターtime_majorを参照)または、それぞれが一致するバッチ次元と時間次元を持つ(おそらくネストされた)テンソルのタプルでもかまいません。対応する出力は、タイムステップとバッチサイズ、またはcell.output_sizeのネストされた構造に一致する、このようなテンソルの(おそらくネストされた)タプル。

詳細については、 source をご覧ください。

2