class_docstr: Multiple Feature Spaces Adaptation Network (MFSAN)
  
  Reference: Zhu, Y., Zhuang, F. and Wang, D., 2019, July. Aligning domain-specific distribution and classifier
      for cross-domain classification from multiple sources. In AAAI.
      https://ojs.aaai.org/index.php/AAAI/article/view/4551
  
  Original implementation: https://github.com/easezyc/deep-transfer-learning/tree/master/MUDA/MFSAN
docstr: Compute discrepancy between all classifiers' probabilistic outputs
docstr_tok: ["Compute","discrepancy","between","all","classifiers","'","probabilistic","outputs"]
code: def cls_discrepancy(self, x):
      """Compute discrepancy between all classifiers' probabilistic outputs"""
      cls_output = self._get_cls_output(x)
      n_domains = len(cls_output)
      cls_disc = 0
      for i in range(n_domains - 1):
          for j in range(i + 1, n_domains):
              cls_disc_ = nn.functional.softmax(
                  cls_output[i], dim=1
              ) - nn.functional.softmax(cls_output[j], dim=1)
              cls_disc += torch.mean(torch.abs(cls_disc_))
  
      return cls_disc * 2 / (n_domains * (n_domains - 1))
  
imports: import torch
  import torch.nn
  from sklearn.base import BaseEstimator, ClassifierMixin
  from sklearn.metrics.pairwise import pairwise_kernels
  from sklearn.preprocessing import LabelBinarizer
  from torch.linalg import multi_dot
  from torch.nn.functional import one_hot
  import kale.predict.losses
  from kale.embed.image_cnn import _Bottleneck
  from kale.pipeline.domain_adapter import BaseAdaptTrainer
label_desc: Use image node_id 5 for calling the MFSANTrainer obj's underlying member method code with example usage: obj.cls_discrepancy(x) and returns: unknown