2016-09-27 10 views
18

Istnieje kilka klas w tf.nn, które dotyczą RNN. W przykładach, które znajduję w sieci, tf.nn.dynamic_rnn i tf.nn.rnn wydają się być używane zamiennie lub przynajmniej nie mogę się domyślić, dlaczego jeden jest używany zamiast drugiego. Jaka jest różnica?Jaka jest różnica między tensorflow dynamic_rnn i rnn?

+0

Zobacz także ten wpis SO https://stackoverflow.com/q/42497216/3924118, gdzie autor pyta o równoważną funkcję 'tf.nn.rnn' dla nowszych wersji TensorFlow, która wydaje się być 'tf.nn.static_rnn'. – nbro

Odpowiedz

24

Od RNNs in Tensorflow, a Practical Guide and Undocumented Features przez Denny Britz, opublikowanym w 21 sierpnia 2016.

tf.nn.rnn tworzy rozwinięty wykres dla stałej długości RNN. Ten oznacza, że ​​jeśli wywołasz tf.nn.rnn z wejściami mającymi 200 kroków czasowych, jesteś tworząc statyczny wykres z 200 krokami RNN. Po pierwsze, tworzenie wykresów jest wolne. Po drugie, nie możesz przekazać dłuższych sekwencji (> 200) niż pierwotnie podana .

tf.nn.dynamic_rnn rozwiązuje to. Używa on pętli tf.While do dynamicznego generowania wykresu podczas jego wykonywania. Oznacza to, że tworzenie wykresów jest szybsze o i można podawać partie o zmiennej wielkości.

+2

Dlaczego nadal używać statycznego RNN, jeśli dynamiczny RNN zapewnia wszystkie zalety praktycznie bez wad? –

2

Są prawie takie same, ale istnieje niewielka różnica w strukturze wejścia i wyjścia. Z dokumentacji:

tf.nn.dynamic_rnn

Funkcja ta jest funkcjonalnie identyczna z funkcją rnn powyżej, ale> wykonuje w pełni dynamiczny odwijanie wejść.

W odróżnieniu od rnn, wejściowe dane wejściowe nie są listą Tensorów w języku Python, jedną dla każdej z nich jest . Zamiast tego, dane wejściowe mogą być pojedynczym Tensorem, gdzie maksymalny czas jest pierwszym lub drugim wymiarem (patrz parametr time_major). Alternatywnie może to być (prawdopodobnie zagnieżdżona) krotka z Tensorów, z których każda ma pasujące wymiary partii i czasu. Odpowiadające dane wyjściowe są albo pojedynczym napinaczem o tym samym numerze z krokami czasu i rozmiarem wsadu, albo (ewentualnie zagnieżdżoną) krotką takich tensorów , dopasowaną do struktury zagnieżdżonej z cell.output_size.

Aby uzyskać więcej informacji, zapoznaj się z source.

Powiązane problemy