В 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))

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

Сколько экземпляров "цепочек 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 измерений.

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