class_docstr: Flatten and concatenation policy model.
  
  :param obs_shapes: Dictionary mapping of observation names to shapes.
  :param action_logits_shapes: Dictionary mapping of observation names to shapes.
  :param hidden_units: List of hidden units to use for the embedding.
  :param head_units: List of hidden units to use for the action/value head.
  :param non_lin: The non-linearity to apply.
class_docstr_tok: ["Flatten","and","concatenation","policy","model",".",":","param","obs_shapes",":","Dictionary","mapping","of","observation","names","to","shapes",".",":","param","action_logits_shapes",":","Dictionary","mapping","of","observation","names","to","shapes",".",":","param","hidden_units",":","List","of","hidden","units","to","use","for","the","embedding",".",":","param","head_units",":","List","of","hidden","units","to","use","for","the","action\/value","head",".",":","param","non_lin",":","The","non-linearity","to","apply","."]
docstr: forward pass. 
docstr_tok: ["forward","pass","."]
code: def forward(self, x):
      """forward pass."""
      return self.net(x)
  
file_path: maze/maze/perception/models/built_in/flatten_concat_shared_embedding.py
imports: from typing import Sequence, Dict, List
  from torch import nn
  from maze.perception.blocks import PerceptionBlock
  from maze.perception.blocks.feed_forward.dense import DenseBlock
  from maze.perception.blocks.inference import InferenceBlock
  from maze.perception.blocks.output.linear import LinearOutputBlock
  from maze.perception.models.built_in.flatten_concat import FlattenConcatBaseNet
  from maze.perception.weight_init import make_module_init_normc
label_desc: Use image node_id 2 for calling the FlattenConcatSharedEmbeddingPolicyNet obj's underlying member method code with example usage: obj.forward(x) and returns: self