class_docstr: main model 
docstr: inp: (batch_size, window_len, feat_dim)
docstr_tok: ["inp",":","(","batch_size",",","window_len",",","feat_dim",")"]
code: def tdnn(self, features, n_class, is_train):
      """
      inp: (batch_size, window_len, feat_dim)
      """
      inp = features["inputs"]
      kernel_size = self.cfg["model"]["net"]["kernel_size"]
      strides = self.cfg["model"]["net"]["strides"]
      num_layers = self.cfg["model"]["net"]["num_layers"]
      filters_num = inp.get_shape()[-1]
  
      for i in range(num_layers):
          output = tf.nn.relu(
              tf.layers.conv1d(
                  inp, filters_num, kernel_size, strides=strides
              )
          )
          output = tf.layers.batch_normalization(
              output, training=is_train, name="bn%d" % i
          )
          inp = output
  
      dim = output.get_shape()[1] * output.get_shape()[2]
      output = tf.reshape(output, [-1, dim])
  
      logits = tf.layers.dense(output, n_class)
      return logits
  
file_path: delta/delta/models/kws_model.py
imports: import delta.compat
  from delta.models.base_model import RawModel
  from delta.utils.register import registers
label_desc: Use image node_id 3 for calling the TdnnKwsModel obj's underlying member method code with example usage: obj.tdnn(features, n_class, is_train) and returns: logits