class_docstr: Implementation of LSTMFCNClassifier from Karim et al (2019) [1].
  
  Overview
  --------
   Combines an LSTM arm with a CNN arm. Optionally uses an attention mechanism in the
   LSTM which the author indicates provides improved performance.
  
  
  Parameters
  ----------
  n_epochs: int, default=2000
   the number of epochs to train the model
  batch_size: int, default=128
      the number of samples per gradient update.
  dropout: float, default=0.8
      controls dropout rate of LSTM layer
  kernel_sizes: list of ints, default=[8, 5, 3]
      specifying the length of the 1D convolution windows
  filter_sizes: int, list of ints, default=[128, 256, 128]
      size of filter for each conv layer
  lstm_size: int, default=8
      output dimension for LSTM layer
  attention: boolean, default=False
      If True, uses custom attention LSTM layer
  callbacks: keras callbacks, default=ReduceLRonPlateau
      Keras callbacks to use such as learning rate reduction or saving best model
      based on validation error
  verbose: 'auto', 0, 1, or 2. Verbosity mode.
      0 = silent, 1 = progress bar, 2 = one line per epoch.
      'auto' defaults to 1 for most cases, but 2 when used with
      `ParameterServerStrategy`. Note that the progress bar is not
      particularly useful when logged to a file, so verbose=2 is
      recommended when not running interactively (eg, in a production
      environment).
  random_state : int or None, default=None
      Seed for random, integer.
  
  
  Notes
  -----
  Ported from sktime-dl source code
  https://github.com/sktime/sktime-dl/blob/master/sktime_dl/classification/_lstmfcn.py
  
  References
  ----------
  .. [1] Karim et al. Multivariate LSTM-FCNs for Time Series Classification, 2019
  https://arxiv.org/pdf/1801.04503.pdf
docstr: Construct a compiled, un-trained, keras model that is ready for training.
  
  ----------
  input_shape : tuple
      The shape of the data fed into the input layer
  n_classes: int
      The number of classes, which shall become the size of the output
       layer
  Returns
  -------
  output : a compiled Keras Model
code: def build_model(self, input_shape, n_classes, **kwargs):
      """
      Construct a compiled, un-trained, keras model that is ready for training.
  
      ----------
      input_shape : tuple
          The shape of the data fed into the input layer
      n_classes: int
          The number of classes, which shall become the size of the output
           layer
      Returns
      -------
      output : a compiled Keras Model
      """
      import tensorflow as tf
      from tensorflow import keras
  
      tf.random.set_seed(self.random_state)
  
      input_layers, output_layer = self._network.build_network(
          input_shape, **kwargs
      )
  
      output_layer = keras.layers.Dense(
          units=n_classes, activation="softmax"
      )(output_layer)
  
      model = keras.models.Model(
          inputs=input_layers, outputs=output_layer
      )
  
      model.compile(
          loss="categorical_crossentropy",
          optimizer="adam",
          metrics=["accuracy"],
      )
  
      self.callbacks = self.callbacks or []
  
      return model
  
file_path: sktime/sktime/classification/deep_learning/lstmfcn.py
imports: from copy import deepcopy
  from sklearn.utils import check_random_state
  from sktime.classification.deep_learning.base import BaseDeepClassifier
  from sktime.networks.lstmfcn import LSTMFCNNetwork
label_desc: Use image node_id 2 for calling the LSTMFCNClassifier obj's underlying member method code with example usage: obj.build_model(input_shape, n_classes) and returns: model