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-го. В этих случаях попробуйте посмотреть на свои данные, чтобы узнать, каков масштаб ваших явлений. Если вам не нужна гранулярность за одну секунду (т. Е. Ваша серия сильно избыточна, поскольку функции не меняются очень быстро во времени), уменьшите масштаб своей серии, чтобы иметь более короткую последовательность для управления.

  • Tensorflow на Android с привязками Python?
  • Использование среды conda в VS2017
  • Форма ввода тензорного потока / tflearn
  • Tensorflow вызывает протоколирование сообщений в два раза
  • Установка тензорного потока в клонированной среде конды обрывает конду, окружающую ее, клонированную из
  • TensorFlow с Eclipse
  • Расчет матричных вычислений на графическом процессоре медленнее, чем на CPU
  • Установка Anaconda Tensorflow завершается неудачей с Debian 8 VirtualBox
  •  
    Interesting Posts for Van-Lav

    Python: переключение на один словарь и создание пар ключ / значение в новом словаре, если условия встречаются

    NLTK Именованное распознавание объектов с пользовательскими данными

    Распределение плотности по частоте 1D-массива – 2 разных попытки

    Django: неверный аргумент ключевого слова для этой функции

    Не удалось сопоставить сравнение юникода Python

    искать похожие фразы с nltk

    Как создать простую сетку в Blender 2.50 через API Python

    Пользователь flask-login установлен на анонимный после входа в систему

    Правильный способ определения функции в anano?

    Кол-во сеанса не сохраняется

    Как я могу обучить простую нелинейную регрессионную модель с тензорным потоком?

    Как разобрать и написать XML с использованием ElementTree Python без перемещения пространств имен?

    элегантная распаковка кортежей переменной длины

    Как мне высмеять обработчик сигнала django?

    Как проверить, пуст ли пул в Python?

    Python - лучший язык программирования в мире.