code: def serving_input_fn(self, hparams, decode_hparams=None, use_tpu=False):
      
      mode = tf.estimator.ModeKeys.PREDICT
      serialized_example = tf.placeholder(
          dtype=tf.string, shape=[None], name="serialized_example")
      dataset = tf.data.Dataset.from_tensor_slices(serialized_example)
      dataset = dataset.map(self.decode_example)
      dataset = dataset.map(lambda ex: self.preprocess_example(ex, mode, hparams))
      dataset = dataset.map(data_reader.cast_ints_to_int32)
  
      if use_tpu:
        padded_shapes = data_reader.pad_for_tpu(dataset.output_shapes, hparams,
                                                hparams.max_length)
        batch_size = 1 if not decode_hparams else getattr(decode_hparams,
                                                          "batch_size", 1)
        dataset = dataset.padded_batch(
            batch_size, padded_shapes, drop_remainder=False)
        dataset = dataset.map(
            functools.partial(data_reader.pad_batch, batch_multiple=batch_size))
      else:
        dataset = dataset.padded_batch(
            tf.shape(serialized_example, out_type=tf.int64)[0],
            dataset.output_shapes)
  
      dataset = dataset.map(data_reader.standardize_shapes)
      features = tf.data.experimental.get_single_element(dataset)
  
      if self.has_inputs:
        features.pop("targets", None)
  
      return tf.estimator.export.ServingInputReceiver(
          features=features, receiver_tensors=serialized_example)
docs: Input fn for serving export, starting from serialized example.