the gradients with respect to module outputs are computed. The
      hook should have the following signature:
     hook(module, grad_input, grad_output) -> tuple(Tensor) or None

  The "grad_input" and "grad_output" are tuples that contain the
  gradients with respect to the inputs and outputs respectively.
  The hook should not modify its arguments, but it can optionally
  return a new gradient with respect to the input that will be
  used in place of "grad_input" in subsequent computations.
  "grad_input" will only correspond to the inputs given as
  positional arguments and all kwarg arguments are ignored.
  Entries in "grad_input" and "grad_output" will be "None" for all
  non-Tensor arguments.

  For technical reasons, when this hook is applied to a Module,
  its forward function will receive a view of each Tensor passed
  to the Module. Similarly the caller will receive a view of each
  Tensor returned by the Module's forward function.
