class_docstr: Implements a discrete MLP Q-value network.
  
  It predicts the Q-value for all possible actions based on the
  input state.
  
  Args:
      env_spec (EnvSpec): Environment specification.
      hidden_sizes (list[int]): Output dimension of dense layer(s).
          For example, (32, 32) means this MLP consists of two
          hidden layers, each with 32 hidden units.
      hidden_nonlinearity (callable or torch.nn.Module): Activation function
          for intermediate dense layer(s). It should return a torch.Tensor.
          Set it to None to maintain a linear activation.
      hidden_w_init (callable): Initializer function for the weight
          of intermediate dense layer(s). The function should return a
          torch.Tensor.
      hidden_b_init (callable): Initializer function for the bias
          of intermediate dense layer(s). The function should return a
          torch.Tensor.
      output_nonlinearity (callable or torch.nn.Module): Activation function
          for output dense layer. It should return a torch.Tensor.
          Set it to None to maintain a linear activation.
      output_w_init (callable): Initializer function for the weight
          of output dense layer(s). The function should return a
          torch.Tensor.
      output_b_init (callable): Initializer function for the bias
          of output dense layer(s). The function should return a
          torch.Tensor.
      layer_normalization (bool): Bool for using layer normalization or not.
class_docstr_tok: ["Implements","a","discrete","MLP","Q-value","network",".","It","predicts","the","Q-value","for","all","possible","actions","based","on","the","input","state",".","Args",":","env_spec","(","EnvSpec",")",":","Environment","specification",".","hidden_sizes","(","list","[","int","]",")",":","Output","dimension","of","dense","layer","(","s",")",".","For","example",",","(","32",",","32",")","means","this","MLP","consists","of","two","hidden","layers",",","each","with","32","hidden","units",".","hidden_nonlinearity","(","callable","or","torch.nn.Module",")",":","Activation","function","for","intermediate","dense","layer","(","s",")",".","It","should","return","a","torch.Tensor",".","Set","it","to","None","to","maintain","a","linear","activation",".","hidden_w_init","(","callable",")",":","Initializer","function","for","the","weight","of","intermediate","dense","layer","(","s",")",".","The","function","should","return","a","torch.Tensor",".","hidden_b_init","(","callable",")",":","Initializer","function","for","the","bias","of","intermediate","dense","layer","(","s",")",".","The","function","should","return","a","torch.Tensor",".","output_nonlinearity","(","callable","or","torch.nn.Module",")",":","Activation","function","for","output","dense","layer",".","It","should","return","a","torch.Tensor",".","Set","it","to","None","to","maintain","a","linear","activation",".","output_w_init","(","callable",")",":","Initializer","function","for","the","weight","of","output","dense","layer","(","s",")",".","The","function","should","return","a","torch.Tensor",".","output_b_init","(","callable",")",":","Initializer","function","for","the","bias","of","output","dense","layer","(","s",")",".","The","function","should","return","a","torch.Tensor",".","layer_normalization","(","bool",")",":","Bool","for","using","layer","normalization","or","not","."]
code: def __init__(
      self,
      env_spec,
      hidden_sizes,
      hidden_nonlinearity=F.relu,
      hidden_w_init=nn.init.xavier_normal_,
      hidden_b_init=nn.init.zeros_,
      output_nonlinearity=None,
      output_w_init=nn.init.xavier_normal_,
      output_b_init=nn.init.zeros_,
      layer_normalization=False,
  ):
      input_dim = env_spec.observation_space.flat_dim
      output_dim = env_spec.action_space.flat_dim
      super().__init__(
          input_dim,
          output_dim,
          hidden_sizes,
          hidden_nonlinearity,
          hidden_w_init,
          hidden_b_init,
          output_nonlinearity,
          output_w_init,
          output_b_init,
          layer_normalization,
      )
  
imports: from torch import nn
  from torch.nn import functional
  from garage.torch.modules import MLPModule
label_desc: Use image node_id 1 to create a new DiscreteMLPQFunction object from inherited base classes: MLPModule with example: obj = DiscreteMLPQFunction(env_spec, hidden_sizes, hidden_nonlinearity, hidden_w_init, hidden_b_init, output_nonlinearity, output_w_init, output_b_init, layer_normalization)