Почему функция backward должна вызываться только для тензора с одним элементом или с градиентами относительно переменной?
Я новичок в Pytorch. Я хочу понять, почему мы не можем вызвать обратную функцию для переменной, содержащей тензор, скажем, размер, скажем, [2,2]. И если мы хотим вызвать его для переменной, содержащей тензор, скажем, размера, скажем, [2,2], мы должны сделать это, сначала определив тензор градиента, а затем вызвав обратную функцию для переменной, содержащей тензор относительно заданных градиентов.,
1 ответ
Из учебника по autograd
Если вы хотите вычислить производные, вы можете вызвать.backward() для переменной. Если переменная является скаляром (т.е. она содержит данные из одного элемента), вам не нужно указывать какие-либо аргументы для backward(), однако, если она имеет больше элементов, вам нужно указать аргумент grad_output, который является тензором соответствующей формы,
В основном, чтобы запустить правило цепочки, вам нужен градиент на выходе, чтобы все заработало. В случае, если выходные данные представляют собой скалярную функцию потерь (которая обычно есть - обычно вы начинаете обратный проход по переменной потерь), ее подразумеваемое значение равно 1,0.
из учебника:
давайте сделаем backprop, теперь out.backward() эквивалентно выполнению out.backward(torch.Tensor([1.0]))
но, возможно, вы хотите обновить только подграф (где-то глубоко в сети)... и значение Variable
это матрица весов. Тогда вы должны сказать, где начать. От одного из их главных разработчиков (где-то в ссылках)
Да, это правильно. Мы поддерживаем только дифференцирование скалярных функций, поэтому, если вы хотите начать обратное формирование нескалярного значения, вам нужно указать dout / dy
Аргумент градиентов
https://discuss.pytorch.org/t/how-the-backward-works-for-torch-variable/907/8 ok объяснение
Pytorch, какие градиентные аргументы хорошее объяснение
http://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html tutorial