code: def createModelWithMultipleDenseInputs(self, save_as_keras):
      input1 = tf.keras.layers.Input(shape=(1,), name="input_1")
      input2 = tf.keras.layers.Input(shape=(1,), name="input_2")
      inputs = [input1, input2]
      input_layer = tf.keras.layers.concatenate(inputs)
      output_layer = tf.keras.layers.Dense(
          1, activation=tf.nn.sigmoid, name="output"
      )(input_layer)
      model = tf.keras.models.Model(inputs, output_layer)
  
      # Add tft_layer to model to test callables stored as attributes
      model.tft_layer = tf.keras.models.Model(
          inputs,
          {"tft_feature": output_layer, "tft_label": output_layer},
      )
  
      @tf.function
      def serving_default(serialized_tf_examples):
          parsed_features = tf.io.parse_example(
              serialized_tf_examples,
              {
                  "input_1": tf.io.FixedLenFeature(
                      [1], dtype=tf.float32
                  ),
                  "input_2": tf.io.FixedLenFeature(
                      [1], dtype=tf.float32
                  ),
              },
          )
          return model(parsed_features)
  
      @tf.function
      def transformed_features(features):
          return {
              "transformed_feature": features["input_1"],
          }
  
      @tf.function
      def transformed_labels(features):
          return {"transformed_label": features["input_2"]}
  
      @tf.function
      def custom_preprocessing(features):
          return {
              "custom_feature": features["input_1"],
              "custom_label": features["input_2"],
          }
  
      single_input_spec = tf.TensorSpec(
          shape=(None,), dtype=tf.string, name="examples"
      )
      multi_input_spec = {
          "input_1": tf.TensorSpec(
              shape=(None, 1), dtype=tf.float32, name="input_1"
          ),
          "input_2": tf.TensorSpec(
              shape=(None, 1), dtype=tf.float32, name="input_2"
          ),
      }
      signatures = {
          "serving_default": serving_default.get_concrete_function(
              single_input_spec
          ),
          "transformed_labels": transformed_labels.get_concrete_function(
              multi_input_spec
          ),
          "transformed_features": transformed_features.get_concrete_function(
              multi_input_spec
          ),
          "custom_preprocessing": custom_preprocessing.get_concrete_function(
              multi_input_spec
          ),
      }
  
      export_path = tempfile.mkdtemp()
      if save_as_keras:
          model.save(
              export_path, save_format="tf", signatures=signatures
          )
      else:
          tf.saved_model.save(model, export_path, signatures=signatures)
      return export_path
  
imports: import tempfile
  import unittest
  from absl.testing import parameterized
  import apache_beam
  from apache_beam.testing import util
  import tensorflow
  from tensorflow_model_analysis import constants
  from tensorflow_model_analysis.api import model_eval_lib
  from tensorflow_model_analysis.eval_saved_model import testutil
  from tensorflow_model_analysis.extractors import features_extractor
  from tensorflow_model_analysis.extractors import transformed_features_extractor
  from tensorflow_model_analysis.proto import config_pb2
  from tfx_bsl.tfxio import tensor_adapter
  from tfx_bsl.tfxio import test_util
  from google.protobuf import text_format
  from tensorflow_metadata.proto.v0 import schema_pb2
label_desc: Use image node_id 2 for calling the TransformedFeaturesExtractorTest obj's underlying member method code with example usage: obj.createModelWithMultipleDenseInputs(save_as_keras) and returns: export_path, model, dict, dict, dict