class_docstr: A trainable interface for a simple, generic encoder + decoder model
  
  # Arguments
  encoder: an encoder object
  decoder: a decoder object
  input_shape: shape of encoder input, for variable length, please use -1 as seq len
  output_shape: shape of decoder input, for variable length, please use -1 as seq len
  bridge: connect encoder and decoder
  generator: Feeding decoder output to generator to generate final result, `None` is supported
  
  >>> encoder = RNNEncoder.initialize("LSTM", 1, 4)
  creating: createZooKerasLSTM
  creating: createZooKerasRNNEncoder
  >>> decoder = RNNDecoder.initialize("LSTM", 1, 4)
  creating: createZooKerasLSTM
  creating: createZooKerasRNNDecoder
  >>> bridge = Bridge.initialize("dense", 4)
  creating: createZooKerasBridge
  >>> seq2seq = Seq2seq(encoder, decoder, [2, 4], [2, 4], bridge)
  creating: createZooKerasInput
  creating: createZooKerasInput
  creating: createZooKerasSelectTable
  creating: createZooKerasModel
  creating: createZooSeq2seq
docstr: Inference API for given input
  
  # Arguments
  input: a sequence of data feed into encoder, eg: batch x seqLen x featureSize
  start_sign: a ndarray which represents start and is fed into decoder
  max_seq_len: max sequence length for final output
  stop_sign: a ndarray that indicates model should stop infer further if current output
  is the same with stopSign
  build_output: Feeding model output to buildOutput to generate final result
docstr_tok: ["Inference","API","for","given","input","#","Arguments","input",":","a","sequence","of","data","feed","into","encoder",",","eg",":","batch","x","seqLen","x","featureSize","start_sign",":","a","ndarray","which","represents","start","and","is","fed","into","decoder","max_seq_len",":","max","sequence","length","for","final","output","stop_sign",":","a","ndarray","that","indicates","model","should","stop","infer","further","if","current","output","is","the","same","with","stopSign","build_output",":","Feeding","model","output","to","buildOutput","to","generate","final","result"]
code: def infer(
      self,
      input,
      start_sign,
      max_seq_len=30,
      stop_sign=None,
      build_output=None,
  ):
      """
      Inference API for given input
  
      # Arguments
      input: a sequence of data feed into encoder, eg: batch x seqLen x featureSize
      start_sign: a ndarray which represents start and is fed into decoder
      max_seq_len: max sequence length for final output
      stop_sign: a ndarray that indicates model should stop infer further if current output
      is the same with stopSign
      build_output: Feeding model output to buildOutput to generate final result
      """
      jinput, input_is_table = Layer.check_input(input)
      assert not input_is_table
      jstart_sign, start_sign_is_table = Layer.check_input(start_sign)
      assert not start_sign_is_table
      if stop_sign:
          jstop_sign, stop_sign_is_table = Layer.check_input(stop_sign)
          assert not start_sign_is_table
      else:
          jstop_sign = None
      results = callZooFunc(
          self.bigdl_type,
          "seq2seqInfer",
          self.value,
          jinput[0],
          jstart_sign[0],
          max_seq_len,
          jstop_sign[0] if jstop_sign else None,
          build_output,
      )
      return results
  
imports: from bigdl.nn.layer import Layer
  from zoo.pipeline.api.keras.layers import *
  from zoo.models.common import ZooModel
  from zoo.common.utils import callZooFunc
  from zoo.pipeline.api.keras.engine import ZooKerasLayer
  from zoo.pipeline.api.keras.models import Model
label_desc: Use image node_id 7 for calling the Seq2seq obj's underlying member method code with example usage: obj.infer(input, start_sign, max_seq_len, stop_sign, build_output) and returns: results