class_docstr: Neural Network to solve Atari problem.
  
  Args:
      act_dim (int): Dimension of action space.
      dueling (bool): True if use dueling architecture else False
docstr: Perform forward pass 
  
  Args:
      obs (torch.Tensor): shape of (batch_size, 3, 84, 84), mini batch of observations
docstr_tok: ["Perform","forward","pass","Args",":","obs","(","torch.Tensor",")",":","shape","of","(","batch_size",",","3",",","84",",","84",")",",","mini","batch","of","observations"]
code: def forward(self, obs):
      """Perform forward pass
  
      Args:
          obs (torch.Tensor): shape of (batch_size, 3, 84, 84), mini batch of observations
      """
      obs = obs / 255.0
      out = self.max_pool(self.relu(self.conv1(obs)))
      out = self.max_pool(self.relu(self.conv2(out)))
      out = self.max_pool(self.relu(self.conv3(out)))
      out = self.relu(self.conv4(out))
      out = self.flatten(out)
  
      if self.dueling:
          As = self.relu(self.linear_1_adv(out))
          As = self.linear_2_adv(As)
          V = self.relu(self.linear_1_val(out))
          V = self.linear_2_val(V)
          Q = As + (V - As.mean(dim=1, keepdim=True))
  
      else:
          Q = self.linear_1(out)
  
      return Q
  
imports: import torch.nn
  import parl
label_desc: Use image node_id 3 for calling the AtariModel obj's underlying member method code with example usage: obj.forward(obs) and returns: Q