provided.
  where:

     \begin{aligned}     N ={} & \text{batch size} \\     L ={} &
     \text{sequence length} \\     D ={} & 2 \text{ if
     bidirectional=True otherwise } 1 \\     H_{in} ={} &
     \text{input\_size} \\     H_{out} ={} & \text{hidden\_size}
     \end{aligned}

Outputs: output, h_n
      * output: tensor of shape (L, D * H_{out}) for unbatched
        input, (L, N, D * H_{out}) when "batch_first=False" or (N, L,
        D * H_{out}) when "batch_first=True" containing the output
        features (h_t) from the last layer of the GRU, for each t.
        If a "torch.nn.utils.rnn.PackedSequence" has been given as the
        input, the output will also be a packed sequence.
  * **h_n**: tensor of shape (D * \text{num\_layers}, H_{out}) or
    (D * \text{num\_layers}, N, H_{out}) containing the final
    hidden state for the input sequence.

Variables:
      * weight_ih_l[k] -- the learnable input-hidden weights of