class_docstr: RNN + Attention
  Input Shape: [batch_size, steps, features]
  Output Shape: [batch_size, units]
class_docstr_tok: ["RNN","+","Attention","Input","Shape",":","[","batch_size",",","steps",",","features","]","Output","Shape",":","[","batch_size",",","units","]"]
code: def __init__(self, config, **kwargs):
      super().__init__(**kwargs)
      logging.info(
          "Initialize RnnAttentionEncoder {}...".format(self.name)
      )
  
      model_config = config["model"]["net"]["structure"]
      self.dropout_rate = model_config["dropout_rate"]
      self.cell_dim = model_config["cell_dim"]
  
      self.sen_encoder = BiRnn(config)
      # self.sen_all_dense = tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(200))
      self.sen_att = delta.layers.HanAttention(
          name="{}_att".format(self.name)
      )
      self.sen_att_d = tf.keras.layers.Dropout(self.dropout_rate)
      # self.sen_att_d_bn = tf.keras.layers.BatchNormalization()
      logging.info(
          "Initialize RnnAttentionEncoder {} Done.".format(self.name)
      )
  
imports: from absl import logging
  import delta.compat
  import delta
  from delta.layers.base_layer import Layer
  from tensorflow_addons import seq2seq
label_desc: Use image node_id 1 to create a new RnnAttentionEncoder object from inherited base classes: Layer with example: obj = RnnAttentionEncoder(config)