Подробное объяснение static_rnn и dynamic_rnn тензорного потока

искусственный интеллект
Подробное объяснение static_rnn и dynamic_rnn тензорного потока

  • Эта статья взята изLoveMIss-Y, адрес блога:blog.CSDN.net/QQ_27825451…
  • Помогает увидеть разницу между динамическим построением RNN и статическим построением RNN.

Предисловие:Tensorflow предоставляет хороший пакет для реализации RNN, но вы действительно понимаете их арифметические процессы? Несколько фотографий поделились на этот раз написанные заметки для собственной руки, есть неверная точка зрения, потому что каждая редакция необходима для рисования, немного усилий, просто напишите картинку.

image.png

Обратите внимание, что в этом месте есть процесс y0-->y0, y1-->y1, y2-->y2.... В статье сказано, что y0 до и после имеет разные значения.Это сказано в нашем проекте что передний тот что выводит[batch_size,y_max_length,vocab_size]Полученные данные представляют собой данные каждого слова, но если мы добавим к ним слой softmax, они станут долей каждого слова в словаре, поэтому y0 до и после разные

image.png

Для базового rnn прямым входным параметром является количество скрытых нейронов (эквивалентное количеству выходных/входных состояний); для статического rnn прямым входным параметром является сконструированный вход _cell и входы

x = tf.placeholder(tf.float32,[None,timesteps,n_inputs])
xx = tf.unstack(tf.transpose(x,perm=[1,0,2]))
basic_cell = BasicalRNNCell(num_units=3)
outputs,states = tf.nn.static_rnn(basical_cell,xx)

image.png

Динамический rnn, прямым входом является построенная rnn_cell и входы

x = tf.placeholder(tf.float32,[None,timesteps,n_inputs])
basic_cell = BasicalRNNCell(num_units=3)
outputs,states = tf.nn.dynamic_rnn(basical_cell,x)

Детали кода избегаются, и программа сама выполняет шаги преобразования ввода Также рассказывается о причинах, по которым basicarnncell можно использовать, но не рекомендуется

image.png

Новое понимание RNN:

  • Первый для последовательности, правильная форма последовательности [X0, X1, X2, X3 ...], где X0 = [X0, X1, X2, ..], полная последовательность должна быть [[X01, X02, X03 ..], [x11, x12, x13 ..]. ..] — двухслойная структура, которая при вычислении BATCH_SIZE является трехслойной структурой.
  • Мы используем высокоуровневый API, раскрывается только количество скрытых нейронов в num_units (размерность выходного состояния), а остальные инкапсулируются. Мы глубоко изучаем основной слой. Часть петли на самом деле является структурой, которая помогает нам добиться этого.Не нужно обращать внимание, лучше понять механизм.