На данный момент у меня есть модель, которая достигает около 81% точности. Данные, с которыми я работаю, являются последовательными, поэтому я хотел бы попробовать включить двунаправленный слой LSTM, чтобы посмотреть, может ли это немного повысить производительность.
Мои данные представляют собой последовательности букв, например, ABCD
, Чтобы передать последовательности через мою модель, я использую горячее кодирование. Так что ABCD
может стать:
[ [1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0] ]
Примечание. Последовательности на самом деле состоят из 300 символов, но я хотел, чтобы предыдущий пример был простым, ради вопроса.
Так что на В данный момент моя модель выглядит следующим образом:
model = keras.Sequential([
keras.layers.Flatten(input_shape=(300, 6)),
keras.layers.Dropout(0.5),
keras.layers.Dense(128, activation='tanh'),
keras.layers.Dropout(0.5),
keras.layers.Dense(64, activation='tanh'),
keras.layers.Dense(1, activation='sigmoid')
])
Таким образом, форма ввода показывает, что каждая последовательность имеет длину 300 букв, с возможностью выбора из 6 букв. Эта модель работает.
Теперь я хочу адаптировать свою модель для использования двунаправленного слоя LSTM, так как я понимаю, что это может дать мне лучшую производительность с последовательными данными. Тем не менее, я изо всех сил пытаюсь понять, как я могу адаптировать эту модель для достижения этой цели. Я пробовал разные варианты расположения слоев, но я получаю ошибки, связанные с размерностью.
Я хочу что-то вроде следующее:
model = keras.Sequential([
keras.layers.Flatten(input_shape=(300, 6)),
keras.layers.Bidirectional(LSTM(64)),
keras.layers.Dropout(0.5),
keras.layers.Dense(128, activation='tanh'),
keras.layers.Dropout(0.5),
keras.layers.Dense(64, activation='tanh'),
keras.layers.Dense(1, activation='sigmoid')
])
I ' Я надеюсь, что кто-то с лучшим пониманием двунаправленного LSTM сможет предложить некоторые рекомендации о том, как это сделать. Спасибо.