See Default gradient layouts for details on the memory layout of
   accumulated gradients.
Note:
 Using this method with "create_graph=True" will create a
 reference cycle between the parameter and its gradient which can
 cause a memory leak. We recommend using "autograd.grad" when
 creating the graph to avoid this. If you have to use this
 function, make sure to reset the ".grad" fields of your
 parameters to "None" after use to break the cycle and avoid the
 leak.

Note:
 If you run any forward ops, create "grad_tensors", and/or call
 "backward" in a user-specified CUDA stream context, see Stream
 semantics of backward passes.

Note:
 When "inputs" are provided and a given input is not a leaf, the
 current implementation will call its grad_fn (even though it is
 not strictly needed to get this gradients). It is an
 implementation detail on which the user should not rely. See htt
