code: def _build_module(self, input_layer):
      # This is almost exactly the same as Dueling Network but we predict the future measurements for each action
      # actions expectation tower (expectation stream) - E
      with tf.variable_scope("expectation_stream"):
          expectation_stream = self.dense_layer(256)(
              input_layer,
              activation=self.activation_function,
              name="fc1",
          )
          expectation_stream = self.dense_layer(
              self.multi_step_measurements_size
          )(expectation_stream, name="output")
          expectation_stream = tf.expand_dims(
              expectation_stream, axis=1
          )
  
      # action fine differences tower (action stream) - A
      with tf.variable_scope("action_stream"):
          action_stream = self.dense_layer(256)(
              input_layer,
              activation=self.activation_function,
              name="fc1",
          )
          action_stream = self.dense_layer(
              self.num_actions * self.multi_step_measurements_size
          )(action_stream, name="output")
          action_stream = tf.reshape(
              action_stream,
              (
                  tf.shape(action_stream)[0],
                  self.num_actions,
                  self.multi_step_measurements_size,
              ),
          )
          action_stream = action_stream - tf.reduce_mean(
              action_stream, reduction_indices=1, keepdims=True
          )
  
      # merge to future measurements predictions
      self.output = tf.add(
          expectation_stream, action_stream, name="output"
      )
      self.target = tf.placeholder(
          tf.float32,
          [None, self.num_actions, self.multi_step_measurements_size],
          name="targets",
      )
      targets_nonan = tf.where(
          tf.is_nan(self.target), self.output, self.target
      )
      self.loss = tf.reduce_sum(
          tf.reduce_mean(
              tf.square(targets_nonan - self.output),
              reduction_indices=0,
          )
      )
      tf.losses.add_loss(self.loss_weight[0] * self.loss)
  
file_path: coach/rl_coach/architectures/tensorflow_components/heads/measurements_prediction_head.py
imports: import tensorflow
  from rl_coach.architectures.tensorflow_components.layers import Dense
  from rl_coach.architectures.tensorflow_components.heads.head import Head
  from rl_coach.base_parameters import AgentParameters
  from rl_coach.core_types import Measurements
  from rl_coach.spaces import SpacesDefinition
label_desc: Use image node_id 2 for calling the MeasurementsPredictionHead obj's underlying member method code with example usage: obj._build_module(input_layer) without return types