class_docstr: Simple feed forward policy network.
  
  :param obs_shapes: The shapes of all observations as a dict.
  :param action_logits_shapes: The shapes of all actions as a dict structure.
  :param hidden_layer_0: The number of units in layer 0.
  :param hidden_layer_1: The number of units in layer 1.
  :param use_bias: Specify whether to use a bias in the linear layers.
code: def __init__(
      self,
      obs_shapes: Dict[str, Sequence[int]],
      action_logits_shapes: Dict[str, Sequence[int]],
      hidden_layer_0: int,
      hidden_layer_1: int,
      use_bias: bool,
  ):
      nn.Module.__init__(self)
  
      self.observation_name = list(obs_shapes.keys())[0]
      self.action_name = list(action_logits_shapes.keys())[0]
  
      self.l0 = nn.Linear(4, hidden_layer_0, bias=use_bias)
      self.l1 = nn.Linear(hidden_layer_0, hidden_layer_1, bias=use_bias)
      self.l2 = nn.Linear(hidden_layer_1, 2, bias=use_bias)
  
file_path: maze/docs/source/policy_and_value_networks/code_snippets/custom_plain_cartpole_policy_net.py
imports: from typing import Dict, Sequence
  import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 1 to create a new CustomPlainCartpolePolicyNet object from inherited base classes: nn with example: obj = CustomPlainCartpolePolicyNet(obs_shapes, action_logits_shapes, hidden_layer_0, hidden_layer_1, use_bias)