Уважаемый читатель!

Эта статья была переиздана на Эдукаора и также была с открытым исходным кодом. К сожалению, TensorFlow 2.0 изменил API, поэтому он не работает для более поздних версий. Мы приветствуем любую помощь в обновлении учебников. Я также рекомендую вам изучить PyTorch.

Этот пост является продолжением статьи Как построить рекуррентную нейронную сеть в TensorFlow », в которой мы построили RNN с нуля, построив вычислительный граф вручную. Теперь мы будем использовать собственный API TensorFlow, чтобы упростить наш скрипт.

Простое создание графика

Помните, где мы делали распаковку и прямую передачу в ванильной RNN?

Замените приведенный выше фрагмент кода следующим:

Вы также можете удалить ранее объявленные матрицы веса и смещения W и b. Внутренняя работа RNN теперь скрыта под капотом. Обратите внимание на использование split вместо unpack при назначении переменной x_inputs. tf.nn.rnn принимает список входных данных формы [batch_size, input_size], а input_size - это просто один в нашем случае (входные данные представляют собой просто серию скаляров). Split не удаляет единичное измерение, а распаковка удаляет, подробнее об этом вы можете прочитать здесь. В любом случае это не имеет значения, поскольку нам все равно пришлось изменить форму входных данных в нашем предыдущем примере перед умножением матриц. tf.nn.rnn разворачивает RNN и автоматически создает график, поэтому мы можем удалить цикл for. Функция возвращает серию предыдущих состояний, а также последнее состояние в той же форме, что и раньше, вручную, вот распечатанный вывод этих переменных.

Вся программа

Вот полный код:

Следующий шаг

В следующем посте мы усовершенствуем RNN, используя другую архитектуру под названием Долгая краткосрочная память или LSTM. На самом деле в этом нет необходимости, поскольку наша сеть уже может решить нашу игрушечную проблему. Но помните, что наша цель - научиться правильно использовать TensorFlow, а не решать реальную проблему, которая является тривиальной :)