Двунаправленные рекуррентные слои (Bidirectional RNN) позволяют
моделям учитывать контекст как из прошлого, так и из будущего
относительно текущего временного шага. Такой подход особенно эффективен
для обработки последовательностей, где значение элемента зависит не
только от предыдущих состояний, но и от последующих. В Keras.js это
реализуется через обертку Bidirectional, которая может
применяться к слоям LSTM, GRU или
SimpleRNN.
Рекуррентные нейронные сети (RNN) анализируют последовательности, передавая скрытое состояние от одного временного шага к другому. В стандартной RNN информация течет только в одном направлении — от начала последовательности к концу. Это ограничивает способность модели захватывать информацию о будущих элементах последовательности.
Двунаправленные RNN решают эту проблему, используя два отдельных слоя:
Выходы двух слоев могут конкатенироваться, суммироваться или применяться другим способом для формирования итогового представления каждого временного шага.
Keras.js позволяет загружать и выполнять предварительно обученные
модели Keras прямо в браузере. Двунаправленные слои создаются в Keras
(Python), экспортируются в формат HDF5 или
TensorFlow.js и затем подгружаются через Keras.js.
Пример конфигурации двунаправленного слоя в Keras:
const keras = require('keras-js');
const model = new keras.Model({
filepath: 'bidirectional_model.bin',
gpu: true
});
Модель в Python может выглядеть так:
from keras.models import Sequential
from keras.layers import LSTM, Bidirectional
model = Sequential()
model.add(Bidirectional(LSTM(64, return_sequences=True), input_shape=(100, 50)))
model.add(Bidirectional(LSTM(32)))
model.compile(optimizer='adam', loss='categorical_crossentropy')
model.save('bidirectional_model.h5')
При экспорте в Keras.js используются веса и архитектура модели, что позволяет выполнять предсказания без серверной обработки.
layer — внутренний рекуррентный слой
(LSTM, GRU, SimpleRNN).
Обязательный параметр.
merge_mode — способ объединения выходов прямого и обратного слоев. Возможные значения:
'sum' — суммирование выходов;'mul' — поэлементное умножение;'concat' — конкатенация (по умолчанию);'ave' — усреднение;None — возвращает кортеж (forward, backward).weights — начальные веса для слоя.
input_shape — форма входной последовательности
[timesteps, features].
Преимущества двунаправленных RNN:
gpu: true позволяет использовать WebGL для ускорения
вычислений в браузере.Для последовательностей длиной 100 с 50 признаками, двунаправленный LSTM создает выход размерности:
merge_mode='concat' —
[timesteps, units * 2]merge_mode='sum' или 'ave' —
[timesteps, units]Это напрямую влияет на последующие Dense-слои и на форму данных, которые подаются на классификатор или регрессор.