code: def drop_path(x, drop_prob: float = 0.0, training: bool = False):
      """Drop paths (Stochastic Depth) per sample (when applied in main path of residual
      blocks). This is the same as the DropConnect impl I created for EfficientNet, etc
      networks, however, the original name is misleading as 'Drop Connect' is a
      different form of dropout in a separate paper... See discussion:
      https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ...
      I've opted for changing the layer and argument names to 'drop path' rather than mix
      DropConnect as a layer name and use 'survival rate' as the argument.
      """
      if drop_prob == 0.0 or not training:
          return x
      keep_prob = 1 - drop_prob
      shape = (x.shape[0],) + (1,) * (
          x.ndim - 1
      )  # work with diff dim tensors, not just 2D ConvNets
      random_tensor = keep_prob + torch.rand(
          shape, dtype=x.dtype, device=x.device
      )
      random_tensor.floor_()  # binarize
      output = x.div(keep_prob) * random_tensor
      return output
  
imports: import collections.abc
  import math
  import warnings
  from dataclasses import dataclass
  from functools import partial
  from itertools import repeat
  import omegaconf
  import torch
  import torch.nn
  import torch.nn.functional
  from mmf.common.registry import registry
  from mmf.modules.encoders import Encoder
label_desc: Use image node_id 4 for calling a global function with example usage: drop_path(x, drop_prob, training) and returns: output, x