class_docstr: main model 
class_docstr_tok: ["main","model"]
docstr: lstm layers
docstr_tok: ["lstm","layers"]
code: def lstm_layer(self, x):
      """lstm layers"""
      if self.netconf["use_lstm_layer"]:
          with tf.variable_scope("lstm"):
              cell_fw = tf.nn.rnn_cell.BasicLSTMCell(
                  self.netconf["cell_num"], forget_bias=1.0
              )
              if self.netconf["use_dropout"]:
                  cell_fw = tf.nn.rnn_cell.DropoutWrapper(
                      cell=cell_fw,
                      output_keep_prob=1 - self.netconf["dropout_rate"]
                      if self.train
                      else 1.0,
                  )
  
              cell_bw = tf.nn.rnn_cell.BasicLSTMCell(
                  self.netconf["cell_num"], forget_bias=1.0
              )
              if self.netconf["use_dropout"]:
                  cell_bw = tf.nn.rnn_cell.DropoutWrapper(
                      cell=cell_bw,
                      output_keep_prob=1 - self.netconf["dropout_rate"]
                      if self.train
                      else 1.0,
                  )
  
              # Now we feed `linear` into the LSTM BRNN cell and obtain the LSTM BRNN output.
              outputs, output_states = tf.nn.bidirectional_dynamic_rnn(
                  cell_fw=cell_fw,
                  cell_bw=cell_bw,
                  inputs=x,
                  dtype=tf.float32,
                  time_major=False,
                  scope="LSTM1",
              )
              del output_states
      else:
          outputs = x
      return outputs
  
imports: from absl import logging
  import delta.compat
  from delta import utils
  from delta.layers import common_layers
  from delta.data.feat.tf_speech_feature import speech_params, extract_feature
  from delta.models.base_model import RawModel
  from delta.utils.register import registers
label_desc: Use image node_id 6 for calling the EmoCRNNRawModel obj's underlying member method code with example usage: obj.lstm_layer(x) and returns: outputs