class_docstr: TCTS Model
  
  Parameters
  ----------
  d_feat : int
      input dimension for each time step
  metric: str
      the evaluation metric used in early stop
  optimizer : str
      optimizer name
  GPU : str
      the GPU ID(s) used for training
class_docstr_tok: ["TCTS","Model","Parameters","--","--","--","--","--","d_feat",":","int","input","dimension","for","each","time","step","metric",":","str","the","evaluation","metric","used","in","early","stop","optimizer",":","str","optimizer","name","GPU",":","str","the","GPU","ID","(","s",")","used","for","training"]
code: def __init__(
      self,
      d_feat=6,
      hidden_size=64,
      num_layers=2,
      dropout=0.0,
      n_epochs=200,
      batch_size=2000,
      early_stop=20,
      loss="mse",
      fore_optimizer="adam",
      weight_optimizer="adam",
      input_dim=360,
      output_dim=5,
      fore_lr=5e-7,
      weight_lr=5e-7,
      steps=3,
      GPU=0,
      target_label=0,
      mode="soft",
      seed=None,
      lowest_valid_performance=0.993,
      **kwargs,
  ):
      # Set logger.
      self.logger = get_module_logger("TCTS")
      self.logger.info("TCTS pytorch version...")
  
      # set hyper-parameters.
      self.d_feat = d_feat
      self.hidden_size = hidden_size
      self.num_layers = num_layers
      self.dropout = dropout
      self.n_epochs = n_epochs
      self.batch_size = batch_size
      self.early_stop = early_stop
      self.loss = loss
      self.device = torch.device(
          "cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu"
      )
      self.use_gpu = torch.cuda.is_available()
      self.seed = seed
      self.input_dim = input_dim
      self.output_dim = output_dim
      self.fore_lr = fore_lr
      self.weight_lr = weight_lr
      self.steps = steps
      self.target_label = target_label
      self.mode = mode
      self.lowest_valid_performance = lowest_valid_performance
      self._fore_optimizer = fore_optimizer
      self._weight_optimizer = weight_optimizer
  
      self.logger.info(
          "TCTS parameters setting:"
          "\nd_feat : {}"
          "\nhidden_size : {}"
          "\nnum_layers : {}"
          "\ndropout : {}"
          "\nn_epochs : {}"
          "\nbatch_size : {}"
          "\nearly_stop : {}"
          "\ntarget_label : {}"
          "\nmode : {}"
          "\nloss_type : {}"
          "\nvisible_GPU : {}"
          "\nuse_GPU : {}"
          "\nseed : {}".format(
              d_feat,
              hidden_size,
              num_layers,
              dropout,
              n_epochs,
              batch_size,
              early_stop,
              target_label,
              mode,
              loss,
              GPU,
              self.use_gpu,
              seed,
          )
      )
  
imports: from __future__ import division
  from __future__ import print_function
  import numpy
  import pandas
  import copy
  import random
  from ...utils import get_or_create_path
  from ...log import get_module_logger
  import torch
  import torch.nn
  import torch.optim
  from ...model.base import Model
  from ...data.dataset import DatasetH
  from ...data.dataset.handler import DataHandlerLP
label_desc: Use image node_id 1 to create a new TCTS object from inherited base classes: Model with example: obj = TCTS(d_feat, hidden_size, num_layers, dropout, n_epochs, batch_size, early_stop, loss, fore_optimizer, weight_optimizer, input_dim, output_dim, fore_lr, weight_lr, steps, GPU, target_label, mode, seed, lowest_valid_performance)