code: def transformer_decoder_layers(
      inputs,
      encoder_output,
      num_layers,
      hparams,
      self_attention_bias=None,
      encoder_decoder_attention_bias=None,
      attention_type=AttentionType.LOCAL_2D,
      losses=None,
      name="transformer",
  ):
      """Multi layer transformer."""
      x = inputs
      x = tf.nn.dropout(x, 1.0 - hparams.layer_prepostprocess_dropout)
      if attention_type == AttentionType.DILATED:
          assert len(hparams.gap_sizes) == num_layers
      for layer in range(num_layers):
          with tf.variable_scope("%s_layer_%d" % (name, layer)):
              # self-attention + skip connections
              if attention_type == AttentionType.LOCAL_2D:
                  y = local_attention_2d(
                      common_layers.layer_preprocess(x, hparams),
                      hparams,
                      attention_type="masked_local_attention_2d",
                  )
              elif attention_type == AttentionType.LOCAL_1D:
                  y = local_attention_1d(
                      common_layers.layer_preprocess(x, hparams),
                      hparams,
                      attention_type="local_mask_right",
                      q_padding="LEFT",
                      kv_padding="LEFT",
                  )
              elif attention_type == AttentionType.RELATIVE_LOCAL_1D:
                  y = local_attention_1d(
                      common_layers.layer_preprocess(x, hparams),
                      hparams,
                      attention_type="local_relative_mask_right",
                      q_padding="LEFT",
                      kv_padding="LEFT",
                  )
              elif attention_type == AttentionType.NON_CAUSAL_1D:
                  y = local_attention_1d(
                      common_layers.layer_preprocess(x, hparams),
                      hparams,
                      attention_type="local_unmasked",
                      q_padding="VALID",
                      kv_padding="VALID",
                  )
              elif attention_type == AttentionType.LOCAL_BLOCK:
                  y = local_within_block_attention(
                      common_layers.layer_preprocess(x, hparams),
                      self_attention_bias,
                      hparams,
                      attention_type="local_within_block_mask_right",
                      q_padding="LEFT",
                      kv_padding="LEFT",
                  )
              elif attention_type == AttentionType.GLOCAL:
                  y = local_global_attention(
                      common_layers.layer_preprocess(x, hparams),
                      self_attention_bias,
                      hparams,
                      q_padding="LEFT",
                      kv_padding="LEFT",
                  )
              elif attention_type == AttentionType.DILATED:
                  y = dilated_attention_1d(
                      common_layers.layer_preprocess(x, hparams),
                      hparams,
                      q_padding="LEFT",
                      kv_padding="LEFT",
                      gap_size=hparams.gap_sizes[layer],
                  )
              elif attention_type == AttentionType.GLOBAL:
                  y = full_self_attention(
                      common_layers.layer_preprocess(x, hparams),
                      self_attention_bias,
                      hparams,
                      q_padding="LEFT",
                      kv_padding="LEFT",
                  )
              x = common_layers.layer_postprocess(x, y, hparams)
              # enc-dec attention + skip connections
              if encoder_output is not None:
                  y = encdec_attention_1d(
                      common_layers.layer_preprocess(x, hparams),
                      encoder_output,
                      encoder_decoder_attention_bias,
                      hparams,
                  )
                  x = common_layers.layer_postprocess(x, y, hparams)
              # feed-fwd layers + skip connections
              y = ffn_layer(
                  common_layers.layer_preprocess(x, hparams),
                  hparams,
                  losses=losses,
              )
              x = common_layers.layer_postprocess(x, y, hparams)
      return common_layers.layer_preprocess(x, hparams)
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import numpy
  from six.moves import range
  from tensor2tensor.layers import common_attention
  from tensor2tensor.layers import common_layers
  from tensor2tensor.utils import expert_utils
  import tensorflow.compat.v1
  from tensorflow.compat.v1 import estimator
label_desc: Use image node_id 10 for calling a global function with example usage: transformer_decoder_layers(inputs, encoder_output, num_layers, hparams, _attention_bias, encoder_decoder_attention_bias, attention_type, losses, name) and returns: common_layers