code: def test_multiple_targets_for_label_smoothing(self) -> None:
      targets = torch.tensor(
          [[0.8, 0.1, 0.1], [0.1, 0.8, 0.1], [0.1, 0.1, 0.8]]
      )
      logits = torch.tensor(
          [[10.0, 0.0, 0.0], [0.0, 10.0, 0.0], [0.0, 0.0, 10.0]]
      )
      criterion = CrossEntropyMultipleOutputSingleTargetCriterion()
      expected = (
          (-torch.log(nn.Softmax(dim=-1)(logits)) * targets)
          .sum(dim=1)
          .mean()
          .item()
      )
      self.assertAlmostEqual(
          criterion(logits, targets).item(), expected
      )
  
imports: import logging
  import unittest
  from collections import namedtuple
  import torch
  import torch.nn
  import torch.optim
  from classy_vision.generic.distributed_util import set_cpu_device
  from parameterized import param, parameterized
  from vissl.config.attr_dict import AttrDict
  from vissl.losses.barlow_twins_loss import BarlowTwinsCriterion
  from vissl.losses.cross_entropy_multiple_output_single_target import CrossEntropyMultipleOutputSingleTargetCriterion, CrossEntropyMultipleOutputSingleTargetLoss
  from vissl.losses.distillation_loss import DistillationCriterion, DistillationLoss
  from vissl.losses.multicrop_simclr_info_nce_loss import MultiCropSimclrInfoNCECriterion
  from vissl.losses.simclr_info_nce_loss import SimclrInfoNCECriterion
  from vissl.losses.swav_loss import SwAVCriterion
label_desc: Use image node_id 3 for calling the TestCrossEntropyMultipleOutputSingleTargetLoss obj's underlying member method code with example usage: obj.test_multiple_targets_for_label_smoothing() without return types