the input but with one dimension equal to 1, or same shape as
        the input but with one fewer dimension (to allow for
        broadcasting)
  * Output: scalar if "reduction" is "'mean'" (default) or
    "'sum'". If "reduction" is "'none'", then (N, *), same shape
    as the input

Examples::
      >>> loss = nn.GaussianNLLLoss()
      >>> input = torch.randn(5, 2, requires_grad=True)
      >>> target = torch.randn(5, 2)
      >>> var = torch.ones(5, 2, requires_grad=True)  # heteroscedastic
      >>> output = loss(input, target, var)
      >>> output.backward()
  >>> loss = nn.GaussianNLLLoss()
  >>> input = torch.randn(5, 2, requires_grad=True)
  >>> target = torch.randn(5, 2)
  >>> var = torch.ones(5, 1, requires_grad=True)  # homoscedastic
  >>> output = loss(input, target, var)
  >>> output.backward()

Note:
 The clamping of "var" is ignored with respect to autograd, and so
 the gradients are unaffected by it.

Reference: