---
myst:
html_meta:
description: Recurrent layers in PyTorch C++ — RNN, LSTM, and GRU modules for sequence modeling.
keywords: PyTorch, C++, RNN, LSTM, GRU, recurrent, sequence, hidden state
---
# Recurrent Layers
Recurrent layers process sequential data by maintaining hidden state across time steps.
They are essential for tasks involving sequences: language modeling, speech recognition,
time series prediction, and more.
- **RNN**: Basic recurrent layer (simple but prone to vanishing gradients)
- **LSTM**: Long Short-Term Memory (gated architecture, handles long-range dependencies)
- **GRU**: Gated Recurrent Unit (simpler than LSTM, often similar performance)
- **Cell variants**: Single-step versions for custom loop implementations
**Key parameters:**
- `input_size`: Number of features in input
- `hidden_size`: Number of features in hidden state
- `num_layers`: Number of stacked recurrent layers
- `batch_first`: If true, input shape is `[batch, seq, features]`
- `bidirectional`: Process sequence in both directions
## RNN
```{doxygenclass} torch::nn::RNN
:members:
:undoc-members:
```
```{doxygenclass} torch::nn::RNNImpl
:members:
:undoc-members:
```
**Example:**
```cpp
auto rnn = torch::nn::RNN(
torch::nn::RNNOptions(128, 256) // input_size, hidden_size
.num_layers(2)
.batch_first(true)
.bidirectional(false));
auto input = torch::randn({32, 10, 128}); // [batch, seq_len, input_size]
auto [output, hidden] = rnn->forward(input);
```
## LSTM
```{doxygenclass} torch::nn::LSTM
:members:
:undoc-members:
```
```{doxygenclass} torch::nn::LSTMImpl
:members:
:undoc-members:
```
**Example:**
```cpp
auto lstm = torch::nn::LSTM(
torch::nn::LSTMOptions(128, 256)
.num_layers(2)
.batch_first(true)
.dropout(0.1)
.bidirectional(true));
auto input = torch::randn({32, 10, 128});
auto [output, state] = lstm->forward(input);
auto [h_n, c_n] = state; // hidden state, cell state
```
## GRU
```{doxygenclass} torch::nn::GRU
:members:
:undoc-members:
```
```{doxygenclass} torch::nn::GRUImpl
:members:
:undoc-members:
```
## RNNCell
```{doxygenclass} torch::nn::RNNCell
:members:
:undoc-members:
```
```{doxygenclass} torch::nn::RNNCellImpl
:members:
:undoc-members:
```
## LSTMCell
```{doxygenclass} torch::nn::LSTMCell
:members:
:undoc-members:
```
```{doxygenclass} torch::nn::LSTMCellImpl
:members:
:undoc-members:
```
## GRUCell
```{doxygenclass} torch::nn::GRUCell
:members:
:undoc-members:
```
```{doxygenclass} torch::nn::GRUCellImpl
:members:
:undoc-members:
```