Note:
 All the weights and biases are initialized from
 \mathcal{U}(-\sqrt{k}, \sqrt{k}) where k =
 \frac{1}{\text{hidden\_size}}

Note:
 For bidirectional LSTMs, forward and backward are directions 0
 and 1 respectively. Example of splitting the output layers when
 "batch_first=False": "output.view(seq_len, batch, num_directions,
 hidden_size)".

Note:
 For bidirectional LSTMs, *h_n* is not equivalent to the last
 element of *output*; the former contains the final forward and
 reverse hidden states, while the latter contains the final
 forward hidden state and the initial reverse hidden state.

Note:
 "batch_first" argument is ignored for unbatched inputs.

Warning:
 There are known non-determinism issues for RNN functions on some
 versions of cuDNN and CUDA. You can enforce deterministic
 behavior by setting the following environment variables:On CUDA
 10.1, set environment variable "CUDA_LAUNCH_BLOCKING=1". This may
