Понимание структуры моей модели LSTM - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь решить следующую проблему:

У меня есть данные временных рядов от ряда устройств. каждая запись устройства имеет длину 3000. Каждый захваченный пункт данных имеет 4 измерения. поэтому мои данные сформированы (количество записей устройства, 3000, 4).

Я пытаюсь создать вектор длиной 3000, где каждая точка данных представляет собой одну из 3 меток (y1, y2, y3), поэтому мой желаемый выходной диммер (номер записи устройства, 3000, 1). Я пометил данные для обучения.

Я пытаюсь использовать для этого модель LSTM, поскольку «классификация по ходу данных временных рядов» кажется проблемой типа RNN.

Моя сеть настроена так:

model = Sequential()
model.add(LSTM(3, input_shape=(3000, 4), return_sequences=True))
model.add(LSTM(3, activation = 'softmax', return_sequences=True))

model.summary()

, и сводка выглядит следующим образом:

Model: "sequential_23"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_29 (LSTM)               (None, 3000, 3)           96        
_________________________________________________________________
lstm_30 (LSTM)               (None, 3000, 3)           84        
=================================================================
Total params: 180
Trainable params: 180
Non-trainable params: 0
_________________________________________________________________

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

Но у меня есть только 180 обучаемых параметров, поэтому я предполагаю, что я делаю что-то ужасно не так.

Может кто-нибудь помочь мне понять, почему у меня так мало обучаемых параметров? Я неправильно понимаю, как настроить этот LSTM? Я просто ни о чем не беспокоюсь?

Означает ли это, что 3 единицы означают, что у меня только 3 блока LSTM? а что он может оглянуться только на 3 наблюдения?

1 Ответ

2 голосов
/ 11 апреля 2020

В упрощенной c точке обзора вы можете рассматривать слой LSTM как расширенный слой Dense с памятью (что позволяет эффективно обрабатывать последовательности). Таким образом, понятие «единиц» также одинаково для обоих: количество нейронов или характерных единиц этих слоев или, другими словами, число отличительных признаков, которые эти слои могут выдержка из ввода.

Поэтому, когда вы указываете количество единиц до 3 для слоя LSTM, это означает, что этот слой может извлекать только 3 отличительных элемента из входных временных шагов (обратите внимание, что количество единиц имеет не имеет ничего общего с длиной входной последовательности, т. е. вся входная последовательность будет обрабатываться слоем LSTM независимо от количества единиц или длины входной последовательности).

Обычно это может быть неоптимальным (хотя, это действительно зависит от сложности конкретной проблемы c и набора данных, над которым вы работаете; т. Е. Возможно, для вашей задачи / набора данных может быть достаточно 3 единиц, и вы должны поэкспериментировать, чтобы узнать). Поэтому часто большее число выбирается для количества единиц (общий выбор: 32, 64, 128, 256), а также задача классификации делегируется выделенному уровню Dense (или иногда его называют «уровень softmax») в вершина модели.

Например, учитывая описание вашей проблемы, модель с 3 сложенными слоями LSTM и классификационным слоем Dense в верхней части может выглядеть следующим образом:

model = Sequential()
model.add(LSTM(64, return_sequences=True, input_shape=(3000, 4)))
model.add(LSTM(64, return_sequences=True))
model.add(LSTM(32, return_sequences=True))
model.add(Dense(3, activation = 'softmax'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...