code: def lstm_seq2seq_internal_attention_bid_encoder(inputs, targets, hparams,
                                                  train):
    
    with tf.variable_scope("lstm_seq2seq_attention_bid_encoder"):
      inputs_length = common_layers.length_from_embedding(inputs)
      # Flatten inputs.
      inputs = common_layers.flatten4d3d(inputs)
      # LSTM encoder.
      encoder_outputs, final_encoder_state = lstm_bid_encoder(
          inputs, inputs_length, hparams, train, "encoder")
      # LSTM decoder with attention
      shifted_targets = common_layers.shift_right(targets)
      # Add 1 to account for the padding added to the left from shift_right
      targets_length = common_layers.length_from_embedding(shifted_targets) + 1
      hparams_decoder = copy.copy(hparams)
      hparams_decoder.hidden_size = 2 * hparams.hidden_size
      decoder_outputs = lstm_attention_decoder(
          common_layers.flatten4d3d(shifted_targets), hparams_decoder, train,
          "decoder", final_encoder_state, encoder_outputs,
          inputs_length, targets_length)
      return tf.expand_dims(decoder_outputs, axis=2)
docs: LSTM seq2seq model with attention, main step used for training.