class_docstr: Applies a multi-layer Elman RNN with `tanh` or `ReLU` non-linearity to an input sequence.
  
  For each element in the input sequence, each layer computes the following
  function:
  
  .. math::
      h_t = \tanh(w_{ih} * x_t + b_{ih}  +  w_{hh} * h_{(t-1)} + b_{hh})
  
  where :math:`h_t` is the hidden state at time `t`, and :math:`x_t` is the output
  of the previous layer at time `t` or :math:`input_t` for the first layer.
  If nonlinearity='relu', then `ReLU` is used instead of `tanh`.
  
  Parameters
  ----------
  hidden_size: int
      The number of features in the hidden state h.
  num_layers: int, default 1
      Number of recurrent layers.
  activation: {'relu' or 'tanh'}, default 'relu'
      The activation function to use.
  layout : str, default 'TNC'
      The format of input and output tensors. T, N and C stand for
      sequence length, batch size, and feature dimensions respectively.
  dropout: float, default 0
      If non-zero, introduces a dropout layer on the outputs of each
      RNN layer except the last layer.
  bidirectional: bool, default False
      If `True`, becomes a bidirectional RNN.
  i2h_weight_initializer : str or Initializer
      Initializer for the input weights matrix, used for the linear
      transformation of the inputs.
  h2h_weight_initializer : str or Initializer
      Initializer for the recurrent weights matrix, used for the linear
      transformation of the recurrent state.
  i2h_bias_initializer : str or Initializer
      Initializer for the bias vector.
  h2h_bias_initializer : str or Initializer
      Initializer for the bias vector.
  input_size: int, default 0
      The number of expected features in the input x.
      If not specified, it will be inferred from input.
  dtype : str, default 'float32'
      Type to initialize the parameters and default states to
  
  
  Inputs:
      - **data**: input tensor with shape `(sequence_length, batch_size, input_size)`
        when `layout` is "TNC". For other layouts, dimensions are permuted accordingly
        using transpose() operator which adds performance overhead. Consider creating
        batches in TNC layout during data batching step.
  
      - **states**: initial recurrent state tensor with shape
        `(num_layers, batch_size, num_hidden)`. If `bidirectional` is True,
        shape will instead be `(2*num_layers, batch_size, num_hidden)`. If
        `states` is None, zeros will be used as default begin states.
  
  Outputs:
      - **out**: output tensor with shape `(sequence_length, batch_size, num_hidden)`
        when `layout` is "TNC". If `bidirectional` is True, output shape will instead
        be `(sequence_length, batch_size, 2*num_hidden)`
      - **out_states**: output recurrent state tensor with the same shape as `states`.
        If `states` is None `out_states` will not be returned.
  
  
  Examples
  --------
  >>> layer = mx.gluon.rnn.RNN(100, 3)
  >>> layer.initialize()
  >>> input = mx.np.random.uniform(size=(5, 3, 10))
  >>> # by default zeros are used as begin state
  >>> output = layer(input)
  >>> # manually specify begin state.
  >>> h0 = mx.np.random.uniform(size=(3, 3, 100))
  >>> output, hn = layer(input, h0)
class_docstr_tok: ["Applies","a","multi-layer","Elman","RNN","with","`","tanh","`","or","`","ReLU","`","non-linearity","to","an","input","sequence",".","For","each","element","in","the","input","sequence",",","each","layer","computes","the","following","function",":","..","math",":",":","h_t","=","\\tanh","(","w_","{","ih","}","*","x_t","+","b_","{","ih","}","+","w_","{","hh","}","*","h_","{","(","t-1",")","}","+","b_","{","hh","}",")","where",":","math",":","`","h_t","`","is","the","hidden","state","at","time","`","t","`",",","and",":","math",":","`","x_t","`","is","the","output","of","the","previous","layer","at","time","`","t","`","or",":","math",":","`","input_t","`","for","the","first","layer",".","If","nonlinearity='relu","'",",","then","`","ReLU","`","is","used","instead","of","`","tanh","`",".","Parameters","--","--","--","--","--","hidden_size",":","int","The","number","of","features","in","the","hidden","state","h.","num_layers",":","int",",","default","1","Number","of","recurrent","layers",".","activation",":","{","'relu","'","or","'tanh","'","}",",","default","'relu'","The","activation","function","to","use",".","layout",":","str",",","default","'TNC'","The","format","of","input","and","output","tensors",".","T",",","N","and","C","stand","for","sequence","length",",","batch","size",",","and","feature","dimensions","respectively",".","dropout",":","float",",","default","0","If","non-zero",",","introduces","a","dropout","layer","on","the","outputs","of","each","RNN","layer","except","the","last","layer",".","bidirectional",":","bool",",","default","False","If","`","True","`",",","becomes","a","bidirectional","RNN",".","i2h_weight_initializer",":","str","or","Initializer","Initializer","for","the","input","weights","matrix",",","used","for","the","linear","transformation","of","the","inputs",".","h2h_weight_initializer",":","str","or","Initializer","Initializer","for","the","recurrent","weights","matrix",",","used","for","the","linear","transformation","of","the","recurrent","state",".","i2h_bias_initializer",":","str","or","Initializer","Initializer","for","the","bias","vector",".","h2h_bias_initializer",":","str","or","Initializer","Initializer","for","the","bias","vector",".","input_size",":","int",",","default","0","The","number","of","expected","features","in","the","input","x",".","If","not","specified",",","it","will","be","inferred","from","input",".","dtype",":","str",",","default","'float32'","Type","to","initialize","the","parameters","and","default","states","to","Inputs",":","-","*","*","data","*","*",":","input","tensor","with","shape","`","(","sequence_length",",","batch_size",",","input_size",")","`","when","`","layout","`","is","``","TNC","''",".","For","other","layouts",",","dimensions","are","permuted","accordingly","using","transpose","(",")","operator","which","adds","performance","overhead",".","Consider","creating","batches","in","TNC","layout","during","data","batching","step",".","-","*","*","states","*","*",":","initial","recurrent","state","tensor","with","shape","`","(","num_layers",",","batch_size",",","num_hidden",")","`",".","If","`","bidirectional","`","is","True",",","shape","will","instead","be","`","(","2","*","num_layers",",","batch_size",",","num_hidden",")","`",".","If","`","states","`","is","None",",","zeros","will","be","used","as","default","begin","states",".","Outputs",":","-","*","*","out","*","*",":","output","tensor","with","shape","`","(","sequence_length",",","batch_size",",","num_hidden",")","`","when","`","layout","`","is","``","TNC","''",".","If","`","bidirectional","`","is","True",",","output","shape","will","instead","be","`","(","sequence_length",",","batch_size",",","2","*","num_hidden",")","`","-","*","*","out_states","*","*",":","output","recurrent","state","tensor","with","the","same","shape","as","`","states","`",".","If","`","states","`","is","None","`","out_states","`","will","not","be","returned",".","Examples","--","--","--","--",">",">",">","layer","=","mx.gluon.rnn.RNN","(","100",",","3",")",">",">",">","layer.initialize","(",")",">",">",">","input","=","mx.np.random.uniform","(","size=","(","5",",","3",",","10",")",")",">",">",">","#","by","default","zeros","are","used","as","begin","state",">",">",">","output","=","layer","(","input",")",">",">",">","#","manually","specify","begin","state",".",">",">",">","h0","=","mx.np.random.uniform","(","size=","(","3",",","3",",","100",")",")",">",">",">","output",",","hn","=","layer","(","input",",","h0",")"]
code: def __init__(
      self,
      hidden_size,
      num_layers=1,
      activation="relu",
      layout="TNC",
      dropout=0,
      bidirectional=False,
      i2h_weight_initializer=None,
      h2h_weight_initializer=None,
      i2h_bias_initializer="zeros",
      h2h_bias_initializer="zeros",
      input_size=0,
      dtype="float32",
      **kwargs,
  ):
      super(RNN, self).__init__(
          hidden_size,
          num_layers,
          layout,
          dropout,
          bidirectional,
          input_size,
          i2h_weight_initializer,
          h2h_weight_initializer,
          i2h_bias_initializer,
          h2h_bias_initializer,
          "rnn_" + activation,
          None,
          None,
          None,
          None,
          False,
          dtype,
          **kwargs,
      )
  
imports: from ...None import np, npx, initializer, cpu
  from ..None import HybridBlock, tensor_types
  from ..parameter import Parameter
  from ...util import use_np
label_desc: Use image node_id 1 to create a new RNN object from inherited base classes: _RNNLayer with example: obj = RNN(hidden_size, num_layers, activation, layout, dropout, bidirectional, i2h_weight_initializer, h2h_weight_initializer, i2h_bias_initializer, h2h_bias_initializer, input_size, dtype)