class_docstr: The implement of focal loss.
  
  The focal loss requires the label is 0 or 1 for now.
  
  Args:
      alpha (float, list, optional): The alpha of focal loss. alpha is the weight
          of class 1, 1-alpha is the weight of class 0. Default: 0.25
      gamma (float, optional): The gamma of Focal Loss. Default: 2.0
      ignore_index (int64, optional): Specifies a target value that is ignored
          and does not contribute to the input gradient. Default ``255``.
class_docstr_tok: ["The","implement","of","focal","loss",".","The","focal","loss","requires","the","label","is","0","or","1","for","now",".","Args",":","alpha","(","float",",","list",",","optional",")",":","The","alpha","of","focal","loss",".","alpha","is","the","weight","of","class","1",",","1-alpha","is","the","weight","of","class","0",".","Default",":","0.25","gamma","(","float",",","optional",")",":","The","gamma","of","Focal","Loss",".","Default",":","2.0","ignore_index","(","int64",",","optional",")",":","Specifies","a","target","value","that","is","ignored","and","does","not","contribute","to","the","input","gradient",".","Default","``","255","``","."]
docstr: Forward computation.
  
  Args:
      logit (Tensor): Logit tensor, the data type is float32, float64. Shape is
          (N, C, H, W), where C is number of classes.
      label (Tensor): Label tensor, the data type is int64. Shape is (N, H, W),
          where each value is 0 <= label[i] <= C-1.
  Returns:
      (Tensor): The average loss.
docstr_tok: ["Forward","computation",".","Args",":","logit","(","Tensor",")",":","Logit","tensor",",","the","data","type","is","float32",",","float64",".","Shape","is","(","N",",","C",",","H",",","W",")",",","where","C","is","number","of","classes",".","label","(","Tensor",")",":","Label","tensor",",","the","data","type","is","int64",".","Shape","is","(","N",",","H",",","W",")",",","where","each","value","is","0","<","=","label","[","i","]","<","=","C-1",".","Returns",":","(","Tensor",")",":","The","average","loss","."]
code: def forward(self, logit, label):
      """
      Forward computation.
  
      Args:
          logit (Tensor): Logit tensor, the data type is float32, float64. Shape is
              (N, C, H, W), where C is number of classes.
          label (Tensor): Label tensor, the data type is int64. Shape is (N, H, W),
              where each value is 0 <= label[i] <= C-1.
      Returns:
          (Tensor): The average loss.
      """
      assert logit.ndim == 4, "The ndim of logit should be 4."
      assert logit.shape[1] == 2, "The channel of logit should be 2."
      assert label.ndim == 3, "The ndim of label should be 3."
  
      class_num = logit.shape[1]  # class num is 2
      logit = paddle.transpose(
          logit, [0, 2, 3, 1]
      )  # N,C,H,W => N,H,W,C
  
      mask = label != self.ignore_index  # N,H,W
      label = paddle.where(mask, label, paddle.zeros_like(label))
      mask = paddle.unsqueeze(mask, 3)
      mask = paddle.cast(mask, "float32")
      mask.stop_gradient = True
  
      label = F.one_hot(label, class_num)  # N,H,W,C
      label = paddle.cast(label, logit.dtype)
      label.stop_gradient = True
  
      loss = F.sigmoid_focal_loss(
          logit=logit,
          label=label,
          alpha=self.alpha,
          gamma=self.gamma,
          reduction="none",
      )
      loss = loss * mask
      avg_loss = paddle.sum(loss) / (
          paddle.sum(paddle.cast(mask != 0.0, "int32")) * class_num
          + self.EPS
      )
      return avg_loss
  
file_path: PaddleSeg/paddleseg/models/losses/focal_loss.py
imports: import numpy
  import paddle
  import paddle.nn
  import paddle.nn.functional
  from paddleseg.cvlibs import manager
label_desc: Use image node_id 2 for calling the FocalLoss obj's underlying member method code with example usage: obj.forward(logit, label) and returns: avg_loss