code: def testGetInputSpecsWithKerasModel(self):
      export_path = self.createModelWithMultipleMixedInputs(True)
      model = tf.keras.models.load_model(export_path)
  
      # Some versions of TF set the TensorSpec.name and others do not. Since we
      # don't care about the name, clear it from the output for testing purposes
      specs = model_util.get_input_specs(model)
      for k, v in specs.items():
          if isinstance(v, tf.TensorSpec):
              specs[k] = tf.TensorSpec(shape=v.shape, dtype=v.dtype)
      self.assertEqual(
          {
              "input_1": tf.TensorSpec(shape=(None, 2), dtype=tf.int64),
              "input_2": tf.SparseTensorSpec(
                  shape=(None, 1), dtype=tf.float32
              ),
              "input_3": tf.RaggedTensorSpec(
                  shape=(None, None), dtype=tf.float32
              ),
          },
          specs,
      )
  
imports: import tempfile
  import unittest
  from absl.testing import parameterized
  import apache_beam
  from apache_beam.testing import util
  import numpy
  import tensorflow
  from tensorflow_model_analysis import constants
  from tensorflow_model_analysis.api import types
  from tensorflow_model_analysis.eval_saved_model import testutil
  from tensorflow_model_analysis.proto import config_pb2
  from tensorflow_model_analysis.utils import model_util
  from tensorflow_model_analysis.utils import util
  from tfx_bsl.tfxio import tf_example_record
  from google.protobuf import text_format
  from tensorflow.core.protobuf import saved_model_pb2
  from tensorflow_metadata.proto.v0 import schema_pb2
label_desc: Use image node_id 21 for calling the ModelUtilTest obj's underlying member method code with example usage: obj.testGetInputSpecsWithKerasModel() without return types