Это не странно, ожидается, что указано Autograd Mechanics в документации PyTorch :
Обратные вычисления никогда не выполняются в подграфах, где не нужны все тензоры градиенты.
Установка km.required_grad_(True)
создает подграф (с одной только средней операцией, равной k1
тензор), поэтому вы получаете k1_mean.grad
. Обратите внимание, что k1 grad
также будет None
в этом случае, поскольку для него не требуется градиент.
По умолчанию tensor
имеет required_grad
, установленное на False
, поэтому график не должен выполнять ненужные операции. Чтобы получить желаемое поведение, измените t
на:
t = torch.rand((2, 3), requires_grad=True)
(каждая тензорная функция имеет аргумент requires_grad
). Это дает вам, как вы, вероятно, ожидали:
k1_grad_fn <AddBackward0 object at 0x7fe3454d6100>
t grad None
k1 mean= tensor(1.0396, grad_fn=<MeanBackward0>)
t grad tensor([[0.3093, 0.1177, 0.2888],
[0.3093, 0.1177, 0.2888]])
k1 grad <AddBackward0 object at 0x7fe3454d6100>