I’m trying to change the gradients of some parameters and at the same time the updated gradients can flow backward.

For instance, there are four variables(A,B,C,D) and the corresponding computational graph:

A->B->C->D

When I change the gradient of C (dD/dC=tensor from outer world not in-place), the gradients of A,B are not changed even though the gradients of C are changed.

in-place method-register_hook-is not helpful in this case because I wanna change the gradients with other values (it means that dD/dC should be changed with some tensors from other computation graph) .

In a word,

C.grad = tensor: dosn’t apply to backward

C.register_hook(): onyl with in-place operation

is there any way to cope with this case?