class_docstr: Compute precision, recall, F-measure and support for each class.
  
  The precision is the ratio `tp / (tp + fp)` where `tp` is the number of
  true positives and `fp` the number of false positives. The precision is
  intuitively the ability of the classifier not to label as positive a sample
  that is negative.
  
  The recall is the ratio `tp / (tp + fn)` where `tp` is the number of
  true positives and `fn` the number of false negatives. The recall is
  intuitively the ability of the classifier to find all the positive samples.
  
  The F-beta score can be interpreted as a weighted harmonic mean of
  the precision and recall, where an F-beta score reaches its best
  value at 1 and worst score at 0.
  
  If we have precision and recall, the F-beta score is simply:
  `F-beta = (1 + beta ** 2) * precision * recall / (beta ** 2 * precision + recall)`
  
  The F-beta score weights recall more than precision by a factor of
  `beta`. `beta == 1.0` means recall and precision are equally important.
  
  The support is the number of occurrences of each class in `y_true`.
  
  # Parameters
  
  beta : `float`, optional (default = `1.0`)
      The strength of recall versus precision in the F-score.
  
  average : `str`, optional (default = `None`)
      If `None`, the scores for each class are returned. Otherwise, this
      determines the type of averaging performed on the data:
  
      `'micro'`:
          Calculate metrics globally by counting the total true positives,
          false negatives and false positives.
      `'macro'`:
          Calculate metrics for each label, and find their unweighted mean.
          This does not take label imbalance into account.
      `'weighted'`:
          Calculate metrics for each label, and find their average weighted
          by support (the number of true instances for each label). This
          alters 'macro' to account for label imbalance; it can result in an
          F-score that is not between precision and recall.
  
  labels : `list`, optional
      The set of labels to include and their order if `average is None`.
      Labels present in the data can be excluded, for example to calculate a
      multi-class average ignoring a majority negative class. Labels not present
      in the data will result in 0 components in a macro or weighted average.
class_docstr_tok: ["Compute","precision",",","recall",",","F-measure","and","support","for","each","class",".","The","precision","is","the","ratio","`","tp","\/","(","tp","+","fp",")","`","where","`","tp","`","is","the","number","of","true","positives","and","`","fp","`","the","number","of","false","positives",".","The","precision","is","intuitively","the","ability","of","the","classifier","not","to","label","as","positive","a","sample","that","is","negative",".","The","recall","is","the","ratio","`","tp","\/","(","tp","+","fn",")","`","where","`","tp","`","is","the","number","of","true","positives","and","`","fn","`","the","number","of","false","negatives",".","The","recall","is","intuitively","the","ability","of","the","classifier","to","find","all","the","positive","samples",".","The","F-beta","score","can","be","interpreted","as","a","weighted","harmonic","mean","of","the","precision","and","recall",",","where","an","F-beta","score","reaches","its","best","value","at","1","and","worst","score","at","0",".","If","we","have","precision","and","recall",",","the","F-beta","score","is","simply",":","`","F-beta","=","(","1","+","beta","*","*","2",")","*","precision","*","recall","\/","(","beta","*","*","2","*","precision","+","recall",")","`","The","F-beta","score","weights","recall","more","than","precision","by","a","factor","of","`","beta","`",".","`","beta","==","1.0","`","means","recall","and","precision","are","equally","important",".","The","support","is","the","number","of","occurrences","of","each","class","in","`","y_true","`",".","#","Parameters","beta",":","`","float","`",",","optional","(","default","=","`","1.0","`",")","The","strength","of","recall","versus","precision","in","the","F-score",".","average",":","`","str","`",",","optional","(","default","=","`","None","`",")","If","`","None","`",",","the","scores","for","each","class","are","returned",".","Otherwise",",","this","determines","the","type","of","averaging","performed","on","the","data",":","`","'micro","'","`",":","Calculate","metrics","globally","by","counting","the","total","true","positives",",","false","negatives","and","false","positives",".","`","'macro","'","`",":","Calculate","metrics","for","each","label",",","and","find","their","unweighted","mean",".","This","does","not","take","label","imbalance","into","account",".","`","'weighted","'","`",":","Calculate","metrics","for","each","label",",","and","find","their","average","weighted","by","support","(","the","number","of","true","instances","for","each","label",")",".","This","alters","'macro","'","to","account","for","label","imbalance",";","it","can","result","in","an","F-score","that","is","not","between","precision","and","recall",".","labels",":","`","list","`",",","optional","The","set","of","labels","to","include","and","their","order","if","`","average","is","None","`",".","Labels","present","in","the","data","can","be","excluded",",","for","example","to","calculate","a","multi-class","average","ignoring","a","majority","negative","class",".","Labels","not","present","in","the","data","will","result","in","0","components","in","a","macro","or","weighted","average","."]
docstr: # Parameters
  
  predictions : `torch.Tensor`, required.
      A tensor of predictions of shape (batch_size, ..., num_classes).
  gold_labels : `torch.Tensor`, required.
      A tensor of integer class label of shape (batch_size, ...). It must be the same
      shape as the `predictions` tensor without the `num_classes` dimension.
  mask : `torch.BoolTensor`, optional (default = `None`).
      A masking tensor the same size as `gold_labels`.
docstr_tok: ["#","Parameters","predictions",":","`","torch.Tensor","`",",","required",".","A","tensor","of","predictions","of","shape","(","batch_size",",","...",",","num_classes",")",".","gold_labels",":","`","torch.Tensor","`",",","required",".","A","tensor","of","integer","class","label","of","shape","(","batch_size",",","...",")",".","It","must","be","the","same","shape","as","the","`","predictions","`","tensor","without","the","`","num_classes","`","dimension",".","mask",":","`","torch.BoolTensor","`",",","optional","(","default","=","`","None","`",")",".","A","masking","tensor","the","same","size","as","`","gold_labels","`","."]
code: def __call__(
      self,
      predictions: torch.Tensor,
      gold_labels: torch.Tensor,
      mask: Optional[torch.BoolTensor] = None,
  ):
      """
      # Parameters
  
      predictions : `torch.Tensor`, required.
          A tensor of predictions of shape (batch_size, ..., num_classes).
      gold_labels : `torch.Tensor`, required.
          A tensor of integer class label of shape (batch_size, ...). It must be the same
          shape as the `predictions` tensor without the `num_classes` dimension.
      mask : `torch.BoolTensor`, optional (default = `None`).
          A masking tensor the same size as `gold_labels`.
      """
      predictions, gold_labels, mask = self.detach_tensors(
          predictions, gold_labels, mask
      )
  
      # Calculate true_positive_sum, true_negative_sum, pred_sum, true_sum
      num_classes = predictions.size(-1)
      if (gold_labels >= num_classes).any():
          raise ConfigurationError(
              "A gold label passed to FBetaMeasure contains "
              f"an id >= {num_classes}, the number of classes."
          )
  
      # It means we call this metric at the first time
      # when `self._true_positive_sum` is None.
      if self._true_positive_sum is None:
          self._true_positive_sum = torch.zeros(
              num_classes, device=predictions.device
          )
          self._true_sum = torch.zeros(
              num_classes, device=predictions.device
          )
          self._pred_sum = torch.zeros(
              num_classes, device=predictions.device
          )
          self._total_sum = torch.zeros(
              num_classes, device=predictions.device
          )
  
      if mask is None:
          mask = torch.ones_like(gold_labels).bool()
      gold_labels = gold_labels.float()
  
      # If the prediction tensor is all zeros, the record is not classified to any of the labels.
      pred_mask = predictions.sum(dim=-1) != 0
      argmax_predictions = predictions.max(dim=-1)[1].float()
  
      true_positives = (
          (gold_labels == argmax_predictions) & mask & pred_mask
      )
      true_positives_bins = gold_labels[true_positives]
  
      # Watch it:
      # The total numbers of true positives under all _predicted_ classes are zeros.
      if true_positives_bins.shape[0] == 0:
          true_positive_sum = torch.zeros(
              num_classes, device=predictions.device
          )
      else:
          true_positive_sum = torch.bincount(
              true_positives_bins.long(), minlength=num_classes
          ).float()
  
      pred_bins = argmax_predictions[mask & pred_mask].long()
      # Watch it:
      # When the `mask` is all 0, we will get an _empty_ tensor.
      if pred_bins.shape[0] != 0:
          pred_sum = torch.bincount(
              pred_bins, minlength=num_classes
          ).float()
      else:
          pred_sum = torch.zeros(num_classes, device=predictions.device)
  
      gold_labels_bins = gold_labels[mask].long()
      if gold_labels.shape[0] != 0:
          true_sum = torch.bincount(
              gold_labels_bins, minlength=num_classes
          ).float()
      else:
          true_sum = torch.zeros(num_classes, device=predictions.device)
  
      self._total_sum += mask.sum().to(torch.float)
  
      self._true_positive_sum += dist_reduce_sum(true_positive_sum)
      self._pred_sum += dist_reduce_sum(pred_sum)
      self._true_sum += dist_reduce_sum(true_sum)
  
file_path: allennlp/allennlp/training/metrics/fbeta_measure.py
imports: from typing import List, Optional, Union
  import torch
  from allennlp.common.util import nan_safe_tensor_divide
  from allennlp.common.checks import ConfigurationError
  from allennlp.training.metrics.metric import Metric
  from allennlp.nn.util import dist_reduce_sum
label_desc: Use image node_id 2 for calling the FBetaMeasure obj's underlying member method code with example usage: obj.__call__(predictions, gold_labels, mask) without return types