class_docstr: Head module for defining a distributional dueling network.
  
  This module expects a (batch_size, in_size)-shaped `torch.Tensor` as input
  and returns `pfrl.action_value.DistributionalDiscreteActionValue`.
  
  Args:
      in_size (int): Input size.
      n_actions (int): Number of actions.
      n_atoms (int): Number of atoms.
      v_min (float): Minimum value represented by atoms.
      v_max (float): Maximum value represented by atoms.
class_docstr_tok: ["Head","module","for","defining","a","distributional","dueling","network",".","This","module","expects","a","(","batch_size",",","in_size",")","-shaped","`","torch.Tensor","`","as","input","and","returns","`","pfrl.action_value.DistributionalDiscreteActionValue","`",".","Args",":","in_size","(","int",")",":","Input","size",".","n_actions","(","int",")",":","Number","of","actions",".","n_atoms","(","int",")",":","Number","of","atoms",".","v_min","(","float",")",":","Minimum","value","represented","by","atoms",".","v_max","(","float",")",":","Maximum","value","represented","by","atoms","."]
code: def __init__(self, in_size, n_actions, n_atoms, v_min, v_max):
      super().__init__()
      assert in_size % 2 == 0
      self.n_actions = n_actions
      self.n_atoms = n_atoms
      self.register_buffer(
          "z_values",
          torch.linspace(v_min, v_max, n_atoms, dtype=torch.float),
      )
      self.a_stream = nn.Linear(in_size // 2, n_actions * n_atoms)
      self.v_stream = nn.Linear(in_size // 2, n_atoms)
  
file_path: pfrl/examples/slimevolley/train_rainbow.py
imports: import argparse
  import gym
  import gym.spaces
  import numpy
  import torch
  from torch import nn
  import pfrl
  from pfrl import agents, experiments, explorers
  from pfrl import nn
  from pfrl import replay_buffers, utils
label_desc: Use image node_id 1 to create a new DistributionalDuelingHead object from inherited base classes: nn with example: obj = DistributionalDuelingHead(in_size, n_actions, n_atoms, v_min, v_max)