Уважаемый читатель!
Эта статья была переиздана на Эдукаора и также была с открытым исходным кодом. К сожалению, 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, а не решать реальную проблему, которая является тривиальной :)