Performs back-propagation on a Torch Tensor, given some external gradient.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(torch_tensor), | intent(in) | :: | tensor |
Tensor to compute gradients of |
||
| type(torch_tensor), | intent(in) | :: | external_gradient |
External tensor used as an initial scaling of the gradient calculation |
||
| logical, | intent(in), | optional | :: | retain_graph |
Should the computational graph be retained? |
subroutine torch_tensor_backward_with_external_gradient(tensor, external_gradient, retain_graph) use, intrinsic :: iso_c_binding, only : c_bool type(torch_tensor), intent(in) :: tensor !! Tensor to compute gradients of type(torch_tensor), intent(in) :: external_gradient !! External tensor used as an initial scaling of the gradient calculation logical, optional, intent(in) :: retain_graph !! Should the computational graph be retained? ! Local arguments logical(c_bool) :: retain_graph_value interface subroutine torch_tensor_backward_with_external_gradient_c(tensor_c, external_gradient_c, & retain_graph_c) & bind(c, name = 'torch_tensor_backward_with_external_gradient') use, intrinsic :: iso_c_binding, only : c_bool, c_ptr implicit none type(c_ptr), value, intent(in) :: tensor_c type(c_ptr), value, intent(in) :: external_gradient_c logical(c_bool), value, intent(in) :: retain_graph_c end subroutine torch_tensor_backward_with_external_gradient_c end interface ! Do not retain the graph by default if (present(retain_graph)) then retain_graph_value = retain_graph else retain_graph_value = .false. end if ! Call back-propagation with the provided external gradient call torch_tensor_backward_with_external_gradient_c(tensor%p, external_gradient%p, & retain_graph_value) end subroutine torch_tensor_backward_with_external_gradient