Предоставление входных данных для ячейки LSTM в API Keras

Я читаю о LSTM в глубоком изучении. От профессора Эндрю Нг курса LSTM три входа для каждой ячейки LSTM.

Входными данными являются состояние ячейки из предыдущей ячейки, т. Е. Верхний индекс "c" (t-1) и выходной сигнал суперскрипта "a" ячейки LSTM (t-1) и входной суперскрипт (t).

Выходными данными для ячейки LSTM является текущее состояние ячейки, т. Е. Верхний индекс "c" (t), а выходными данными суперскрипта "a" для ячейки LSTM (t).

Как мы передаем параметры инициализации для ячейки LSTM в кератах для входов, упомянутых выше?

Спасибо за помощь. Простой пример будет полезен.

1 ответ

Решение

По умолчанию вам не нужно указывать начальное состояние для слоя LSTM в кератах.

Если вы хотите указать начальное состояние, вы можете сделать это так LSTM(units)(input, initial_state), где initial_state список тензоров [hidden_state, cell_State], hidden_state а также cell_state соответственно с помощью ваших обозначений "супер" сценарий (t-1) и "c" верхний индекс (t-1). Для каждого события существует одно скрытое и одно состояние ячейки, поэтому при обучении каждая фигура должна быть(batch_size, units),

Ниже приведен минимальный рабочий пример того, как это сделать в tf.keras (должно быть то же самое в keras, но не проверял код)

from tensorflow import keras 
import numpy as np

n_features=3
n_timelag=10
n_pred=1
batch_size=32
lstm_size=30

# make initial state
single_hidden_state=np.random.random(lstm_size)
single_cell_state=np.random.random(lstm_size)
# clone for each batch
hidden_state=np.tile(single_hidden_state,(batch_size,1))
cell_state=np.tile(single_cell_state,(batch_size,1))
# numpy to tensorflow constant
initial_state=[keras.backend.constant(hidden_state),keras.backend.constant(cell_state)]

# create training data
X=np.random.random((batch_size,n_timelag,n_features))
Y=np.random.random((batch_size,n_pred))

# create network
inp=keras.Input((n_timelag,n_features))
lstm_l1=keras.layers.LSTM(lstm_size)(inp, initial_state=initial_state)
pred = keras.layers.Dense(n_pred)(lstm_l1)

# create model
model = keras.models.Model(inputs=inp, outputs=pred)
model.compile(loss='mse', optimizer='adam')

# train model
model.fit(X,Y)

Для получения дополнительной информации о том, как обрабатывать начальное состояние LSTM и последовательность для последовательности в keras, смотрите эту ссылку

Другие вопросы по тегам