code: def get_conf_loss(self, y_conf, matches, gt_boxes):
      # y_conf (batch, num_preds/class, num_classes)
      # match the caffe version where things are (HWC, N)
      # y_conf should be (batch_size, num_preds_per_class, num_classes)
  
      # for each of the confidences we need to the GT label
      # which comes from the matches
  
      # calculate the softmax loss
      prob = self.softmax_dev(y_conf.reshape(-1, self.num_classes))
      self.loss[:] = -1 * self.be.log(prob)
  
      loss = self.loss.reshape(y_conf.shape).get()
  
      for batch in range(self.be.bsz):
          match_inds = matches[batch]["inds"]
          gt_boxes_ = gt_boxes[batch]
          if len(gt_boxes_) == 0:
              continue
  
          label = match_inds.copy().astype(np.int)
          label[match_inds == -1] = self.background_label_id
          inds = np.where(match_inds > -1)[0]
          label[inds] = gt_boxes_[match_inds[inds], 4]
  
          matches[batch]["conf_loss"] = loss[
              batch, range(loss.shape[1]), label
          ]
  
imports: from neon import NervanaObject
  import numpy
  from util import util
  from neon.transforms import Softmax
label_desc: Use image node_id 13 for calling the MBoxLoss obj's underlying member method code with example usage: obj.get_conf_loss(y_conf, matches, gt_boxes) without return types