class_docstr: Establish Network structure for TapNet.
  
  Adapted from the implementation used in [1]
  
  Parameters
  ----------
  kernel_size     : array of int, default = (8, 5, 3)
      specifying the length of the 1D convolution window
  layers          : array of int, default = (500, 300)
      size of dense layers
  filter_sizes    : array of int, shape = (nb_conv_layers), default = (256, 256, 128)
  random_state    : int, default = 1
      seed to any needed random actions
  rp_params       : array of int, default = (-1, 3)
      parameters for random permutation
  dropout         : float, default = 0.5
      dropout rate, in the range [0, 1)
  dilation        : int, default = 1
      dilation value
  padding         : str, default = 'same'
      type of padding for convolution layers
  use_rp          : bool, default = True
      whether to use random projections
  use_att         : bool, default = True
      whether to use self attention
  use_lstm        : bool, default = True
      whether to use an LSTM layer
  use_cnn         : bool, default = True
      whether to use a CNN layer
  
  References
  ----------
  .. [1] Zhang et al. Tapnet: Multivariate time series classification with
  attentional prototypical network,
  Proceedings of the AAAI Conference on Artificial Intelligence
  34(4), 6845-6852, 2020
code: def __init__(
      self,
      dropout=0.5,
      filter_sizes=(256, 256, 128),
      kernel_size=(8, 5, 3),
      dilation=1,
      layers=(500, 300),
      use_rp=True,
      rp_params=(-1, 3),
      use_att=True,
      use_lstm=True,
      use_cnn=True,
      random_state=1,
      padding="same",
  ):
      _check_soft_dependencies(
          "keras-self-attention",
          package_import_alias={
              "keras-self-attention": "keras_self_attention"
          },
          severity="error",
      )
      _check_dl_dependencies(severity="error")
  
      super().__init__()
  
      self.random_state = random_state
      self.kernel_size = kernel_size
      self.layers = layers
      self.rp_params = rp_params
      self.filter_sizes = filter_sizes
      self.use_att = use_att
      self.dilation = dilation
      self.padding = padding
  
      self.dropout = dropout
      self.use_lstm = use_lstm
      self.use_cnn = use_cnn
  
      # parameters for random projection
      self.use_rp = use_rp
      self.rp_params = rp_params
  
file_path: sktime/sktime/networks/tapnet.py
imports: import math
  import numpy
  from sktime.networks.base import BaseDeepNetwork
  from sktime.utils.validation._dependencies import _check_dl_dependencies, _check_soft_dependencies
label_desc: Use image node_id 1 to create a new TapNetNetwork object from inherited base classes: BaseDeepNetwork with example: obj = TapNetNetwork(dropout, filter_sizes, kernel_size, dilation, layers, use_rp, rp_params, use_att, use_lstm, use_cnn, random_state, padding)