Как работать с LSTM с множеством функций в python? - PullRequest
1 голос
/ 26 марта 2020

У меня проблема двоичной классификации. Для своей классификации я использую следующую модель керасов:

input1 = Input(shape=(25,6))
x1 = LSTM(200)(input1)
input2 = Input(shape=(24,6))
x2 = LSTM(200)(input2)
input3 = Input(shape=(21,6))
x3 = LSTM(200)(input3)
input4 = Input(shape=(20,6))
x4 = LSTM(200)(input4)
x = concatenate([x1,x2,x3,x4])
x = Dropout(0.2)(x)
x = Dense(200)(x)
x = Dropout(0.2)(x)
output = Dense(1, activation='sigmoid')(x)

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

Я с радостью предоставлю более подробную информацию, если это необходимо.

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Вот что я могу предложить

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

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

  3. Теперь, если вы LUCKY и вы можете видеть переоснащение, вы можете добавить Dropout и регуляризатор.

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

Если вы не можете добиться лучшего результата

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

1 голос
/ 26 марта 2020

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

...