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
docstr: Get l2 distance between two points.
  
  Parameters
  ----------
  x           : 2D array of shape (N x D)
  y           : 2D array of shape (M x D)
  
  Returns
  -------
  Euclidean distance x and y
code: def euclidean_dist(x, y):
      """Get l2 distance between two points.
  
      Parameters
      ----------
      x           : 2D array of shape (N x D)
      y           : 2D array of shape (M x D)
  
      Returns
      -------
      Euclidean distance x and y
      """
      import tensorflow as tf
  
      # x: N x D
      # y: M x D
      n = tf.shape(x)[0]
      m = tf.shape(y)[0]
      d = tf.shape(x)[1]
      # assert d == tf.shape(y)[1]
      x = tf.expand_dims(x, 1)
      y = tf.expand_dims(y, 0)
      x = tf.broadcast_to(x, shape=(n, m, d))
      y = tf.broadcast_to(y, shape=(n, m, d))
      return tf.math.reduce_sum(tf.math.pow(x - y, 2), axis=2)
  
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 3 for calling the TapNetNetwork obj's underlying member method code with example usage: obj.euclidean_dist(x, y) and returns: tf