Что задать в параметре оси слоя BatchNormalization для данных временного ряда? - PullRequest
0 голосов
/ 28 декабря 2018

Я обучаю сеть LSTM по данным временных рядов и хотел бы нормализовать данные, потому что мои функции имеют разный масштаб.

Моя форма данных

(n_samples x n_timestamps x n_features)

Я хотел быиспользуйте BatchNormalization layer .

Должен ли я установить axis в 2 (функции, как указано в документации) или 1 (временные метки)?Я хотел бы, чтобы мои функции входили в диапазон [0..1], хотя они имеют очень разный масштаб.

Проблема в том, что документация не говорит, что на самом деле делает этот слой, а вместо этого дает рекомендациидля CNN.

1 Ответ

0 голосов
/ 28 декабря 2018

Обычно вы используете измерение пространственных объектов: -1.

Оно будет обрабатывать каждый объект индивидуально и нормализоваться на основе любого другого измерения.Но это не заставит их перейти в диапазон от 0 до 1. Он будет использовать (x - mean)/variance и применять масштабный коэффициент и смещение после нормализации.

Например.Возьмите функцию 0:

  • см. Значения функции 0 для всех выборок и всех временных шагов в пакете
  • получите среднее значение и дисперсию всех этих значений
  • Рассчитайтенормализованное значение нулевого объекта для всех выборок и шагов
  • применить масштабный коэффициент для объекта 0
  • применить смещение для объекта 0

Повторить то же самое для объекта1, с другим средним значением, другой дисперсией, масштабом и смещением.

Если вы используете измерение временных шагов, оно будет видеть каждый шаг отдельно и давать один масштабный коэффициент для каждого шага, что не имеет особого смысла, поскольку все шаги должны иметь схожую природу, в отличие от функций, которые могут означать совершенно разныевещи.

Если вам нужны значения от 0 до 1, вы можете просто применить Activatoin('sigmoid').Если вы боитесь, что ваши значения будут слишком насыщенными, вы можете применить BatchNormalization(), а затем Activatoin('sigmoid').

...