class_docstr: Adds Gaussian Noise to the input tensor
  
  >>> import torch
  >>> from doctr.transforms import GaussianNoise
  >>> transfo = GaussianNoise(0., 1.)
  >>> out = transfo(torch.rand((3, 224, 224)))
  
  Args:
  ----
      mean : mean of the gaussian distribution
      std : std of the gaussian distribution
class_docstr_tok: ["Adds","Gaussian","Noise","to","the","input","tensor",">",">",">","import","torch",">",">",">","from","doctr.transforms","import","GaussianNoise",">",">",">","transfo","=","GaussianNoise","(","0.",",","1",".",")",">",">",">","out","=","transfo","(","torch.rand","(","(","3",",","224",",","224",")",")",")","Args",":","--","--","mean",":","mean","of","the","gaussian","distribution","std",":","std","of","the","gaussian","distribution"]
code: def forward(self, x: torch.Tensor) -> torch.Tensor:
      # Reshape the distribution
      noise = (
          self.mean
          + 2 * self.std * torch.rand(x.shape, device=x.device)
          - self.std
      )
      if x.dtype == torch.uint8:
          return (x + 255 * noise).round().clamp(0, 255).to(dtype=torch.uint8)  # type: ignore[attr-defined]
      else:
          return (x + noise.to(dtype=x.dtype)).clamp(0, 1)
  
imports: import math
  from typing import Any, Dict, Optional, Tuple, Union
  import numpy
  import torch
  from PIL.Image import Image
  from torch.nn.functional import pad
  from torchvision.transforms import functional
  from torchvision.transforms import transforms
  from ..functional.pytorch import random_shadow
label_desc: Use image node_id 2 for calling the GaussianNoise obj's underlying member method code with example usage: obj.forward(x) and returns: unknown, unknown