class_docstr: Fully-connected + BN (s,a)-input Q-function.
  
  Args:
      n_dim_obs (int): Number of dimensions of observation space.
      n_dim_action (int): Number of dimensions of action space.
      n_hidden_channels (int): Number of hidden channels.
      n_hidden_layers (int): Number of hidden layers.
      normalize_input (bool): If set to True, Batch Normalization is applied
          to both observations and actions.
      nonlinearity (callable): Nonlinearity between layers. It must accept a
          Variable as an argument and return a Variable with the same shape.
          Nonlinearities with learnable parameters such as PReLU are not
          supported. It is not used if n_hidden_layers is zero.
      last_wscale (float): Scale of weight initialization of the last layer.
code: def __init__(
      self,
      n_dim_obs,
      n_dim_action,
      n_hidden_channels,
      n_hidden_layers,
      normalize_input=True,
      nonlinearity=F.relu,
      last_wscale=1.0,
  ):
      self.n_input_channels = n_dim_obs + n_dim_action
      self.n_hidden_layers = n_hidden_layers
      self.n_hidden_channels = n_hidden_channels
      self.normalize_input = normalize_input
      self.nonlinearity = nonlinearity
      super().__init__(
          in_size=self.n_input_channels,
          out_size=1,
          hidden_sizes=[self.n_hidden_channels] * self.n_hidden_layers,
          normalize_input=self.normalize_input,
          nonlinearity=nonlinearity,
          last_wscale=last_wscale,
      )
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from pfrl.initializers import init_lecun_normal
  from pfrl.nn.mlp import MLP
  from pfrl.nn.mlp_bn import MLPBN
  from pfrl.q_function import StateActionQFunction
label_desc: Use image node_id 1 to create a new FCBNSAQFunction object from inherited base classes: MLPBN, StateActionQFunction with example: obj = FCBNSAQFunction(n_dim_obs, n_dim_action, n_hidden_channels, n_hidden_layers, normalize_input, nonlinearity, last_wscale)