LSTM Autoencoder не работает, когда скрипт работает на более крупном наборе данных

Форма p_input в этом LSTM Autoencoder для «test.py» равна (128,8,1); что означает 128 наборов из 8 цифр. Я пытаюсь адаптировать эту модель к данным на основе временных рядов с 4 наборами 25 000 шагов времени (в основном от 0 секунд до 25 000 секунд). Я попытался ввести этот набор данных в p_input с формой (4,25000,1) и ошибок не было. Однако, когда я запускаю сценарий, вместо того, чтобы получать его iter 1: 0.01727, iter 2: 0.00983, ... Я не получаю никакой iter 1: 0.01727, iter 2: 0.00983, ... обратной связи от скрипта, поэтому я предполагаю, что что-то держит скрипт. Я также попытался просто изменить batch_num на 4 и step_num на 25 000 непосредственно в неотредактированный файл test.py и тот же результат, что и без печатной обратной связи.

Мои мысли таковы, что в «test.py» p_inputs занимает слишком много времени, чтобы вычислить операции tf.split и tf.squeeze . Другая мысль состоит в том, что мне может потребоваться увеличить количество скрытых элементов LSTM в hidden_num и / или увеличить количество эпох ( iteration ). Кроме того, может быть, что batch_num должен быть больше, чем step_num . Я попробовал это с помощью «test.py» с step_num = 4 и batch_num = 25000 и скрипт работал нормально с печатной обратной связью.

Сообщите мне свои мысли о том, что может быть проблемой при запуске скрипта.

One Solution collect form web for “LSTM Autoencoder не работает, когда скрипт работает на более крупном наборе данных”

Второе измерение вашего ввода – это количество раз, когда сеть разворачивается для вычисления градиентов по алгоритму BPTT .

Идея состоит в том, что повторяющаяся сеть (например, LSTM) преобразуется в прямую сеть путем «разворачивания» каждого временного шага в качестве нового уровня сети.

Когда вы предоставляете все временные ряды вместе (т.е. 25000 временных шагов), вы разворачиваете свою сеть 25000 раз, то есть вы получите развернутую сеть с поддержкой 25000 уровней!

Поэтому, хотя я не знаю, почему вы не получаете никаких ошибок, проблема, вероятно, связана с проблемой OUT OF MEMORY. Вы не можете вместить 25000 переменных слоев в память.

Когда вам приходится иметь дело с длинными рядами, вам нужно разделить свои данные на куски (скажем, 20 временных шагов). Вы предоставляете один кусок за один проход. Затем при каждом следующем запуске вам необходимо восстановить начальное состояние сети с последним состоянием предыдущего запуска.

Я могу привести вам пример. То, что у вас есть (я игнорирую третье измерение по практическим соображениям), представляет собой вектор 4×25000, который имеет форму примерно так:

 --------------------- 25000---------------------- | | 4 | | -------------------------------------------------- 

Теперь вам нужно разбить его на куски:

 ----20----- ----20----- ----20----- | | | | | | | | | | | | 4 | 4 | 4 | [...] | | | | | | | | | | | | ----------- ----------- ----------- 

Каждый раз вы предоставляете один кусок 4×20. Затем конечное состояние вашего LSTM после каждого патрона должно быть предоставлено в качестве входного сигнала со следующим патроном.

Поэтому ваш feed_dict должен быть примерно таким:

 feed_dict ={x: input_4_20}, state.c = previous_state.c, state.h=previous_state.h} 

См. Учебник LM Tensorflow для примера о том, как обеспечить состояние LSTM для следующего запуска.

Функция Tensorflow позволяет выполнять эту функцию автоматически. Дополнительную информацию см. В Tensorflow DevSummit Tutorial для RNN API. Я связал точную секунду, где объясняются требуемые функции. Эта функция является tf.contrib.training.batch_sequences_with_states(...)

В качестве последнего совета я бы предложил вам пересмотреть свою задачу. По сути, временный ряд из 25000 – это действительно ДЛИТЕЛЬНАЯ последовательность, и меня беспокоит тот факт, что даже LSTM не может управлять такими длинными зависимостями прошлого. Я имею в виду, что, когда вы обрабатываете 24000-й элемент серии, состояние LSTM, вероятно, забыло обо всех элементах 1-го. В этих случаях попробуйте посмотреть на свои данные, чтобы узнать, каков масштаб ваших явлений. Если вам не нужна гранулярность за одну секунду (т. Е. Ваша серия сильно избыточна, поскольку функции не меняются очень быстро во времени), уменьшите масштаб своей серии, чтобы иметь более короткую последовательность для управления.

  • Почему «tf.Variable (, tf.float32)« работает в тензорном потоке?
  • Tensorflow не показывает «Успешно открытые так называемые библиотеки CUDA локально»
  • AttributeError: модуль 'tensorflow.contrib.learn' не имеет атрибута 'TensorFlowDNNClassifier'
  • Расчет матричных вычислений на графическом процессоре медленнее, чем на CPU
  • TensorFlow создает набор данных из массива numpy
  • Ошибка Tensorflow с использованием моих собственных данных
  • Модель не учится в тензорном потоке
  • Инструкции CPU не скомпилированы с помощью TensorFlow
  • Ошибка при импорте модуля тензорного потока
  • У объекта TensorFlow 'module' нет атрибута 'global_variables_initializer'
  • Python не может импортировать shadoworflow в Mac OS X 10.8
  • Python - лучший язык программирования в мире.