class_docstr: The LSTM-encoder-decoder-based multivariate time series anomaly detector.
  The time series representation is modeled by an encoder-decoder network where
  both encoder and decoder are LSTMs. The distribution of the reconstruction error
  is estimated for anomaly detection.
code: def __init__(self, config: LSTMEDConfig):
      super().__init__(config)
      self.num_epochs = config.num_epochs
      self.batch_size = config.batch_size
      self.lr = config.lr
      self.hidden_size = config.hidden_size
      self.sequence_length = config.sequence_len
      self.n_layers = config.n_layers
      self.dropout = config.dropout
  
      assert (
          len(self.n_layers) == 2
      ), "Param n_layers should contain two values: (num_layers for LSTM encoder, num_layers for LSTM decoder)"
      assert len(self.n_layers) == len(
          self.dropout
      ), "Param dropout should contain two values"
  
      self.device = "cuda" if torch.cuda.is_available() else "cpu"
      self.lstmed = None
      self.data_dim = None
  
imports: from typing import Sequence
  import numpy
  import pandas
  from merlion.models.base import NormalizingConfig
  from merlion.models.anomaly.base import DetectorBase, DetectorConfig
  from merlion.post_process.threshold import AggregateAlarms
  from merlion.utils.misc import ProgressBar, initializer
  from merlion.models.utils.rolling_window_dataset import RollingWindowDataset
label_desc: Use image node_id 1 to create a new LSTMED object from inherited base classes: DetectorBase with example: obj = LSTMED(config)