Простая, но беспокоящая проблема с функцией tenors.backward () в PyTorch - PullRequest
0 голосов
/ 02 декабря 2018

В эти дни я изучаю PyTorch, и функция backward() действительно смутила меня.Давайте сразу перейдем к моей проблеме:

Я определил несколько тензоров и операций:

`` `

import torch
x = torch.ones(2,5,requires_grad=True)
y = x + 2
z = x*x
Y = torch.mean(y)
Z = torch.mean(z)

` ``

Если я запустлюэто:

y.backward(torch.ones(2,5))
z.backward(torch.ones(2,5))

ошибки не возникло.

Но, если я запустил это:

Y.backward()
Z.backward()

Я получил:

    RuntimeError                              Traceback (most recent call last)
<ipython-input-7-732c4cd53ca7> in <module>()
      1 Y.backward()
----> 2 Z.backward()

E:\learningsoft\anadonda\lib\site-packages\torch\tensor.py in backward(self, gradient, retain_graph, create_graph)
     91                 products. Defaults to ``False``.
     92         """
---> 93         torch.autograd.backward(self, gradient, retain_graph, create_graph)
     94 
     95     def register_hook(self, hook):

E:\learningsoft\anadonda\lib\site-packages\torch\autograd\__init__.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables)
     88     Variable._execution_engine.run_backward(
     89         tensors, grad_tensors, retain_graph, create_graph,
---> 90         allow_unreachable=True)  # allow_unreachable flag
     91 
     92 

RuntimeError: Trying to backward through the graph a second time, but the buffers have already been freed. Specify retain_graph=True when calling backward the first time.

Может кто-нибудь сказать мне , почему у них разные результаты?


Позвольте мне привести больше примеров: example1 (рисунок)

...