tf.nn
には、RNNに関連するいくつかのクラスがあります。 Webで見つけた例では、tf.nn.dynamic_rnn
とtf.nn.rnn
は同じ意味で使用されているようです。違いはなんですか?
TensorflowのRNN、実用ガイドおよびドキュメント化されていない機能 Denny Britz著、2016年8月21日発行。
tf.nn.rnn
は、固定されたRNN長の展開されたグラフを作成します。つまり、200個のタイムステップを持つ入力でtf.nn.rnn
を呼び出すと、200個のRNNステップを持つ静的グラフが作成されます。まず、グラフの作成が遅いです。次に、最初に指定したよりも長いシーケンス(> 200)を渡すことができません。
tf.nn.dynamic_rnn
はこれを解決します。tf.While
ループを使用して、実行時にグラフを動的に構築します。つまり、グラフの作成が高速になり、さまざまなサイズのバッチをフィードできます。
それらはほぼ同じですが、入力と出力の構造に少し違いがあります。ドキュメントから:
tf.nn.dynamic_rnn
この関数は、上記の関数
rnn
と機能的に同じですが、入力の完全に動的な展開を実行します。
rnn
とは異なり、入力入力はPythonフレームごとに1つのテンソルのリストではありません。代わりに、入力は最大時間が最初または2番目の次元(パラメーターtime_major
を参照)または、それぞれが一致するバッチ次元と時間次元を持つ(おそらくネストされた)テンソルのタプルでもかまいません。対応する出力は、タイムステップとバッチサイズ、またはcell.output_size
のネストされた構造に一致する、このようなテンソルの(おそらくネストされた)タプル。
詳細については、 source をご覧ください。