docs: @Override
      public double computeScore(double fullNetRegTerm, boolean training, LayerWorkspaceMgr workspaceMgr) {
          if (input == null || labels == null)
              throw new IllegalStateException("Cannot calculate score without input and labels " + layerId());
          this.fullNetRegTerm = fullNetRegTerm;
          INDArray preOut = preOutput2d(training, workspaceMgr);
  
          // center loss has two components
          // the first enforces inter-class dissimilarity, the second intra-class dissimilarity (squared l2 norm of differences)
          ILossFunction interClassLoss = layerConf().getLossFn();
  
          // calculate the intra-class score component
          INDArray centers = params.get(CenterLossParamInitializer.CENTER_KEY);
          INDArray l = labels.castTo(centers.dataType()); //Ensure correct dtype (same as params); no-op if already correct dtype
          INDArray centersForExamples = l.mmul(centers);
  
          //        double intraClassScore = intraClassLoss.computeScore(centersForExamples, input, Activation.IDENTITY.getActivationFunction(), maskArray, false);
          INDArray norm2DifferenceSquared = input.sub(centersForExamples).norm2(1);
          norm2DifferenceSquared.muli(norm2DifferenceSquared);
  
          double sum = norm2DifferenceSquared.sumNumber().doubleValue();
          double lambda = layerConf().getLambda();
          double intraClassScore = lambda / 2.0 * sum;
  
          //        intraClassScore = intraClassScore * layerConf().getLambda() / 2;
  
          // now calculate the inter-class score component
          double interClassScore = interClassLoss.computeScore(getLabels2d(workspaceMgr, ArrayType.FF_WORKING_MEM), preOut, layerConf().getActivationFn(),
                          maskArray, false);
  
          double score = interClassScore + intraClassScore;
  
          score /= getInputMiniBatchSize();
          score += fullNetRegTerm;
  
          this.score = score;
          return score;
      }