class_docstr: An LSTM implementation that supports recurrent dropout 
code: def __init__(
      self,
      input_size,
      hidden_size,
      num_layers,
      bias=True,
      batch_first=False,
      dropout=0,
      bidirectional=False,
      pad=False,
      rec_dropout=0,
  ):
      super().__init__()
      self.batch_first = batch_first
      self.pad = pad
      self.num_layers = num_layers
      self.hidden_size = hidden_size
  
      self.dropout = dropout
      self.drop = nn.Dropout(dropout, inplace=True)
      self.rec_drop = nn.Dropout(rec_dropout, inplace=True)
  
      self.num_directions = 2 if bidirectional else 1
  
      self.cells = nn.ModuleList()
      for l in range(num_layers):
          in_size = (
              input_size
              if l == 0
              else self.num_directions * hidden_size
          )
          for d in range(self.num_directions):
              self.cells.append(
                  nn.LSTMCell(in_size, hidden_size, bias=bias)
              )
  
file_path: stanza/stanza/models/common/packed_lstm.py
imports: import torch
  import torch.nn
  import torch.nn.functional
  from torch.nn.utils.rnn import pad_packed_sequence, pack_padded_sequence, pack_sequence, PackedSequence
label_desc: Use image node_id 1 to create a new LSTMwRecDropout object from inherited base classes: nn with example: obj = LSTMwRecDropout(input_size, hidden_size, num_layers, bias, batch_first, dropout, bidirectional, pad, rec_dropout)