Какая разница между LSTM() и LSTMCell()?

Я проверил исходный код для обеих функций, и кажется, что LSTM() делает сеть LSTM вообще, в то время как LSTMCell() возвращает только одну ячейку.

Однако в большинстве случаев люди используют только одну LSTM Cell в своей программе. Означает ли это, когда у вас есть только одна ячейка LSTM (например, в простой Seq2Seq), вызов LSTMCell() и LSTM() не имеет значения?

Ответ 1

  • LSTM является повторяющимся слоем
  • LSTMCell - это объект (который тоже является слоем) , используемый слоем LSTM, который содержит логику вычисления для одного шага.

Рекуррентный слой содержит объект ячейки. Ячейка содержит основной код для вычислений каждого шага, в то время как рекуррентный уровень управляет ячейкой и выполняет фактические рекуррентные вычисления.

Обычно люди используют слои LSTM в своем коде.
Или они используют слои RNN, содержащие LSTMCell.

Обе вещи почти одинаковы. Слой LSTM - это слой RNN, использующий LSTMCell, как вы можете проверить в исходном коде.

О количестве ячеек:

Несмотря на то, что из-за своего названия LSTMCell кажется единственной ячейкой, на самом деле это объект, который управляет всеми единицами/ячейками, как мы можем подумать. В том же упомянутом коде вы можете видеть, что аргумент units используется при создании экземпляра LSTMCell.