В Keras, что именно я настраиваю, когда создаю слой LSTM с состоянием с N `units`?

Первые аргументы в нормальном Dense слое также являются units и являются количеством нейронов/узлов в этом слое. Однако стандартный модуль LSTM выглядит следующим образом:

enter image description here

(Это переработанная версия " Понимание сетей LSTM ")

В Keras, когда я создаю объект LSTM, подобный этому LSTM(units=N,...), я фактически создаю N из этих единиц LSTM? Или это размер слоев "нейронной сети" внутри блока LSTM, т.е. W в формулах? Или что-то еще?

Для контекста я работаю на основе этого примера кода.

Вот документация: https://keras.io/layers/recurrent/

Это говорит:

единицы: положительное целое число, размерность выходного пространства.

Это заставляет меня думать, что это число выходов объекта Keras LSTM "layer". Это означает, что следующий слой будет иметь N входов. Означает ли это, что на самом деле существует N из этих модулей LSTM на уровне LSTM, или, может быть, этот ровно один модуль LSTM выполняется для N итераций, выводящих N из этих значений h[t], скажем, от h[tN] до h[t]?

Если он определяет только количество выходов, означает ли это, что вход по-прежнему может быть, скажем, только один, или мы должны вручную создать запаздывающие входные переменные от x[tN] до x[t], по одной для каждой единицы LSTM, определенной как units=N аргумент?

Когда я пишу это, мне приходит в голову, что делает аргумент return_sequences. Если установлено значение " True все N выходов передаются на следующий уровень, а если значение " False то только последний вывод h[t] передается на следующий уровень. Я прав?

Ответ 1

Вы можете проверить этот вопрос для получения дополнительной информации, хотя он основан на API Keras-1.x.

В основном, unit означает размерность внутренних ячеек в LSTM. Поскольку в LSTM размер внутренней ячейки (C_t и C_ {t-1} в графике), маска вывода (o_t на графике) и состояние скрытия/вывода (h_t на графике) должны иметь SAME, поэтому размер вывода должен быть unit -length.

И LSTM в Keras определяет только один блок LSTM, чьи ячейки имеют размер unit -length. Если вы установите return_sequence=True, он вернет что-то с формой: (batch_size, timespan, unit). Если false, то он просто возвращает последний результат в форме (batch_size, unit).

Что касается ввода, вы должны указать ввод для каждой отметки времени. В принципе, форма похожа на (batch_size, timespan, input_dim), где input_dim может отличаться от unit. Если вы просто хотите предоставить ввод на первом этапе, вы можете просто поместить свои данные с нулями на других временных шагах.

Ответ 2

Означает ли это, что на самом деле существует N из этих модулей LSTM на уровне LSTM, или, может быть, этот ровно один модуль LSTM выполняется для N итераций, выводящих N из этих значений h [t], скажем, от h [tN] до h [т]?

Первое верно. В этом слое Keras LSTM есть N единиц или ячеек LSTM.

keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False) 

Если вы планируете создать простой слой LSTM с 1 ячейкой, вы закончите с этим: enter image description here И это будет ваша модель.

N=1
model = Sequential()
model.add(LSTM(N))

Для других моделей вам понадобится N> 1 enter image description here