GRU
class torch.nn.GRU(args, *kwargs)
Applies a multi-layer gated recurrent unit (GRU) RNN to an input
   sequence.
For each element in the input sequence, each layer computes the
   following function:
  \begin{array}{ll}     r_t = \sigma(W_{ir} x_t + b_{ir} + W_{hr}
  h_{(t-1)} + b_{hr}) \\     z_t = \sigma(W_{iz} x_t + b_{iz} +
  W_{hz} h_{(t-1)} + b_{hz}) \\     n_t = \tanh(W_{in} x_t +
  b_{in} + r_t * (W_{hn} h_{(t-1)}+ b_{hn})) \\     h_t = (1 -
  z_t) * n_t + z_t * h_{(t-1)} \end{array}

where h_t is the hidden state at time t, x_t is the input at time
   t, h_{(t-1)} is the hidden state of the layer at time t-1 or
   the initial hidden state at time 0, and r_t, z_t, n_t are the
   reset, update, and new gates, respectively. \sigma is the sigmoid
   function, and * is the Hadamard product.
In a multilayer GRU, the input x^{(l)}_t of the l -th layer (l >=
   2) is the hidden state h^{(l-1)}_t of the previous layer multiplied