В Keras, что именно я настраиваю, когда создаю слой LSTM с сохранением состояния с N `единицами`?
Первые аргументы в нормальном Dense
слой также units
, и число нейронов / узлов в этом слое. Однако стандартный модуль LSTM выглядит следующим образом:
(Это переработанная версия " Понимание сетей LSTM")
В Керасе, когда я создаю объект 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[t-N]
вплоть до h[t]
?
Если он определяет только количество выходов, означает ли это, что вход по-прежнему может быть, скажем, один, или мы должны вручную создавать запаздывающие входные переменные x[t-N]
в x[t]
по одному для каждого блока LSTM, определенного units=N
аргумент?
Когда я пишу это, мне приходит в голову, что аргумент return_sequences
делает. Если установлено True
все N
выходы передаются на следующий уровень, если он установлен на False
это только проходит последний h[t]
вывод на следующий слой. Я прав?
1 ответ
Вы можете проверить этот вопрос для получения дополнительной информации, хотя он основан на Keras-1.x API.
В основном, unit
означает размерность внутренних ячеек в LSTM. Поскольку в LSTM измерение внутренней ячейки (C_t и C_{t-1} на графике), выходной маски (o_t на графике) и скрытого / выходного состояния (h_t на графике) должны иметь одинаковое измерение, поэтому вы размерность выхода должна быть unit
длина также.
А также LSTM
в Керасе определяют только один блок LSTM, чьи ячейки unit
-длина. Если вы установите return_sequence=True
, он вернет что-то с формой: (batch_size, timespan, unit)
, Если false
, тогда он просто вернет последний вывод в форме (batch_size, unit)
,
Что касается ввода, вы должны обеспечить ввод для каждой отметки времени. В основном, форма похожа (batch_size, timespan, input_dim)
, где input_dim
может отличаться от unit
, Если вы просто хотите ввести данные на первом этапе, вы можете просто дополнить свои данные нулями на других временных шагах.
Означает ли это, что на самом деле существует 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))
Сколько экземпляров "цепочек LSTM"
Правильное интуитивное объяснение параметра 'units' для рекуррентных нейронных сетей Keras состоит в том, что с units=1
вы получаете RNN, как описано в учебниках, и с units=n
вы получите слой, состоящий из n
независимые копии таких RNN - они будут иметь идентичную структуру, но поскольку они будут инициализированы с разными весами, они будут вычислять что-то другое.
В качестве альтернативы вы можете считать, что в LSTM с units=1
ключевые значения (f, i, C, h) скалярны; и сunits=n
они будут векторами длины n
.
"Интуитивно", как и в плотном слое со 100 тусклыми (Dense(100)), будет 100 нейронов. Таким же образом LSTM(100) будет слоем из 100 `` умных нейронов '', где каждый нейрон - это фигура, которую вы упомянули, а на выходе будет вектор из 100 измерений.