В 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 ячейкой, вы закончите с этим:
И это будет ваша модель.
N=1
model = Sequential()
model.add(LSTM(N))
Для других моделей вам понадобится N> 1 ![enter image description here]()