Заставьте LSTM учиться на основе соотношения 3 переменных - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть набор данных из 3 переменных x, y, z.и они показания 3 разных датчиков.Это будут входы.

Когда эти датчики находят конкретный объект, соответствующие выходные данные их показаний должны равняться 1. В противном случае соответствующие выходные данные этих показаний должны быть равны 0.

Это пример, когда они находят объект This is example when they find the object

и это пример, когда они не находят объект enter image description here

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

Каков наилучший способ реализовать это?

1 Ответ

0 голосов
/ 01 февраля 2019

«Лучшая» модель - «арт».Вы должны тестировать и тестировать, пока у вас не появится тот, который хорошо подходит вашим данным.

Но в основном у вас будут входные данные с формой (examples, time_steps, features), где:

  • examples =чем больше значение, тем лучше
  • time_steps = длина (количество показаний) для каждого примера
  • features = 3.

Затем вы создадитемодель, которая начинается с:

inputs = Input((None, 3)) #variable time_steps, 3 features   

Вы, вероятно, выиграете от использования нормализации этих значений, возможно, со слоем нормализации партии:

outputs = BatchNormalization()(inputs)
outputs = Activation('tanh')(outputs)

Затем вы запускаетеLSTM часть модели (количество слоев зависит от ваших тестов)

#any number of layers similar to this (this can also be 0)
outputs = LSTM(units, return_sequences=True, activation='tanh')(outputs)

#the last LSTM layer
outputs = LSTM(units, return_sequences=False, activation='tanh')(outputs)

Вы можете добавлять или не добавлять дополнительные классификационные слои, такие как:

#any number of classification layers, including 0
outputs = Dense(units)(outputs)
outputs = BatchNormalization()(outputs)
outputs = Activation('relu')(outputs)

#last classification:
outputs = Dense(1)(outputs)
outputs = BatchNormalization()(outputs)
outputs = Activatoin('sigmoid')(outputs)

Наконец, присоединяйтесь ко всем:

model = Model(intpus, outputs)

Обратите внимание, что это только пример модели.Это может сильно отличаться (включая ветки, объединения, механизмы внимания и т. Д., Но ваша проблема кажется достаточно простой).

Важными частями здесь являются:

  • Понимание формы ввода
  • Понимание того, что в последнем LSTM вы отбрасываете измерение "time_steps".
    • Теперь ваша задача 2D - (examples, units_or_features)
  • Понимание того, что ваш последний слой должен иметь только одну единицу.(Таким образом, он может возвращать один результат в каждом примере)
    • Ваши выходные данные также должны соответствовать этой форме: (examples, 1)
  • Понимание того, что последняя активация должна быть 'sigmoid', поэтому результат находится между 0 и 1.
...