class_docstr: Fully-connected deterministic policy.
  
  Args:
      n_input_channels (int): Number of input channels.
      n_hidden_layers (int): Number of hidden layers.
      n_hidden_channels (int): Number of hidden channels.
      action_size (int): Size of actions.
      min_action (ndarray or None): Minimum action. Used only if bound_action
          is set to True.
      min_action (ndarray or None): Minimum action. Used only if bound_action
          is set to True.
      bound_action (bool): If set to True, actions are bounded to
          [min_action, max_action] by tanh.
      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.
class_docstr_tok: ["Fully-connected","deterministic","policy",".","Args",":","n_input_channels","(","int",")",":","Number","of","input","channels",".","n_hidden_layers","(","int",")",":","Number","of","hidden","layers",".","n_hidden_channels","(","int",")",":","Number","of","hidden","channels",".","action_size","(","int",")",":","Size","of","actions",".","min_action","(","ndarray","or","None",")",":","Minimum","action",".","Used","only","if","bound_action","is","set","to","True",".","min_action","(","ndarray","or","None",")",":","Minimum","action",".","Used","only","if","bound_action","is","set","to","True",".","bound_action","(","bool",")",":","If","set","to","True",",","actions","are","bounded","to","[","min_action",",","max_action","]","by","tanh",".","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_input_channels,
      n_hidden_layers,
      n_hidden_channels,
      action_size,
      min_action=None,
      max_action=None,
      bound_action=True,
      nonlinearity=F.relu,
      last_wscale=1.0,
  ):
      self.n_input_channels = n_input_channels
      self.n_hidden_layers = n_hidden_layers
      self.n_hidden_channels = n_hidden_channels
      self.action_size = action_size
      self.min_action = min_action
      self.max_action = max_action
      self.bound_action = bound_action
  
      if self.bound_action:
  
          def action_filter(x):
              return bound_by_tanh(x, self.min_action, self.max_action)
  
      else:
          action_filter = None
  
      super().__init__(
          model=MLP(
              n_input_channels,
              action_size,
              (n_hidden_channels,) * n_hidden_layers,
              nonlinearity=nonlinearity,
              last_wscale=last_wscale,
          ),
          action_filter=action_filter,
      )
  
imports: from logging import getLogger
  import chainer
  from chainer import functions
  from chainer.initializers import LeCunNormal
  from chainer import links
  from chainerrl import distribution
  from chainerrl.functions.bound_by_tanh import bound_by_tanh
  from chainerrl.links.mlp import MLP
  from chainerrl.links.mlp_bn import MLPBN
  from chainerrl.policy import Policy
  from chainerrl.recurrent import RecurrentChainMixin
label_desc: Use image node_id 1 to create a new FCDeterministicPolicy object from inherited base classes: ContinuousDeterministicPolicy with example: obj = FCDeterministicPolicy(n_input_channels, n_hidden_layers, n_hidden_channels, action_size, min_action, max_action, bound_action, nonlinearity, last_wscale)