class_docstr: Implements a gated recurrent unit for use in AttentionNet
class_docstr_tok: ["Implements","a","gated","recurrent","unit","for","use","in","AttentionNet"]
docstr: input_shape (torch.Tensor): dimension of the input
  init_bias: Bias added to every input to stabilize training
docstr_tok: ["input_shape","(","torch.Tensor",")",":","dimension","of","the","input","init_bias",":","Bias","added","to","every","input","to","stabilize","training"]
code: def __init__(self, dim: int, init_bias: int = 0.0, **kwargs):
      """
      input_shape (torch.Tensor): dimension of the input
      init_bias: Bias added to every input to stabilize training
      """
      super().__init__(**kwargs)
      # Xavier initialization of torch tensors
      self._w_r = nn.Parameter(torch.zeros(dim, dim))
      self._w_z = nn.Parameter(torch.zeros(dim, dim))
      self._w_h = nn.Parameter(torch.zeros(dim, dim))
      nn.init.xavier_uniform_(self._w_r)
      nn.init.xavier_uniform_(self._w_z)
      nn.init.xavier_uniform_(self._w_h)
      self.register_parameter("_w_r", self._w_r)
      self.register_parameter("_w_z", self._w_z)
      self.register_parameter("_w_h", self._w_h)
  
      self._u_r = nn.Parameter(torch.zeros(dim, dim))
      self._u_z = nn.Parameter(torch.zeros(dim, dim))
      self._u_h = nn.Parameter(torch.zeros(dim, dim))
      nn.init.xavier_uniform_(self._u_r)
      nn.init.xavier_uniform_(self._u_z)
      nn.init.xavier_uniform_(self._u_h)
      self.register_parameter("_u_r", self._u_r)
      self.register_parameter("_u_z", self._u_z)
      self.register_parameter("_u_h", self._u_h)
  
      self._bias_z = nn.Parameter(
          torch.zeros(
              dim,
          ).fill_(init_bias)
      )
      self.register_parameter("_bias_z", self._bias_z)
  
imports: from ray.rllib.utils.framework import try_import_torch
  from ray.rllib.utils.framework import TensorType
label_desc: Use image node_id 1 to create a new GRUGate object from inherited base classes: nn with example: obj = GRUGate(dim, init_bias)