Предупреждение пользователя: атрибут .grad Tensor, который не осуществляется доступ к листовому тензору. Его атрибут .grad не будет заполнен во время autograd.backward(). Если вы действительно хотите, чтобы поле .grad было заполнено для нелистового тензора, используйте .retain_grad() для нелистового тензора. Если вы по ошибке получили доступ к нелистовому тензору, убедитесь, что вместо этого вы получили доступ к листовому тензору. Дополнительную информацию см. на github.com/pytorch/pytorch/pull/30531. (Внутренне срабатывает по адресу aten/src/ATen/core/TensorBody.h:417.)
Я знаю, что это предупреждение, но поскольку мне нужно градиент позже, не вычисление градиента приводит к выдаче ошибки NoneType в следующей строке моего кода:
Код: Выделить всё
P2 = -0.5 * (gradient / torch.norm(gradient, dim=0)) + P1 Код: Выделить всё
def get_spherical_step(self, start, gradient, step_size):
with torch.no_grad():
P1 = start / torch.norm(start, dim=0)
P2 = -0.5 * (gradient / torch.norm(gradient, dim=0)) + P1
P2 /= torch.norm(P2, dim=0)
projection_p1_p2 = (P1 * P2).sum(dim=0, keepdim=True) * P1
orthogonal_part = P2 - projection_p1_p2
end = P1 * math.cos(step_size) + (orthogonal_part / torch.norm(orthogonal_part, dim=0, keepdim=True)) * math.sin(step_size)
epsilon = 1e-7
zero_gradient_mask = (torch.norm(gradient, dim=0)
Подробнее здесь: [url]https://stackoverflow.com/questions/79238710/grad-attribute-of-a-tensor-that-is-not-a-leaf-tensor-is-being-accessed[/url]
Мобильная версия