gamenn
November 21, 2017, 1:32am
1
I am getting an error while executing the following code:
with autograd.record():
outY = network(batchInput)
totalLoss = nd.mean((outY - batchOutput)**2) + network.cost()
The error message says “Check failed: AGInfo::IsNone(*(outputs[i])) Assigning to NDArrays that are already in a computational graph will cause undefined behavior when evaluating gradients. Please call backward first to clear the graph or do this out side of a record section.”.
Any insight into what could cause this error and how to fix it?
Thanks a lot!
gamenn
November 22, 2017, 1:36am
2
I figured out what was causing those error messages. I am posting my findings here for the benefit of anyone else who may run into this issue.
In the “network” function, I had code like the following:
blah = input.slice_axis(axis=1, begin=inXDim-1, end=inXDim)
blah = blah.reshape((numInputs,))
Seems like we can’t have re-assignments like this to the same variable in code that is going to be executed inside autograd.record.
Another variation of the same issue I had was within my network.cost() method where the code was:
costs = 0
for layer in self.layers:
costs += layer.cost()
Here, the variable “costs” gets re-assigned each time through the loop.
I got around the issue by using a different variable in the first case above, and by unrolling the loop in the second case.
Any confirmation/additional comments by more knowledgeable people would be great.
Hi, could you give a minimum snippet that runs into this issue? I cannot reproduce.
gamenn
November 28, 2017, 1:15am
4
Just putting something like the code I quoted in my reply above should reproduce it.
Can
February 5, 2018, 3:26am
5
I meet the same error.
And when I replace costs +=
with costs = costs +
, it works correctly.
1 Like