This repository was archived by the owner on Dec 2, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 434
This repository was archived by the owner on Dec 2, 2023. It is now read-only.
print not supported in autograd #86
Copy link
Copy link
Open
Labels
Description
Looks like tangent only supports autograd on operations registered at adjoint
. Is it a good idea to simply ignore those non-registered operations when doing autograd?
def f(x):
a = x * x
b = x * a
c = a + b
print c
return c
import tangent
df = tangent.grad(f)
Gives
ValueErrorTraceback (most recent call last)
<ipython-input-10-d32ca81b2574> in <module>()
1 import tangent
----> 2 df = tangent.grad(f)
/usr/local/lib/python2.7/dist-packages/tangent/grad_util.pyc in grad(func, wrt, optimized, preserve_result, check_dims, verbose)
384 check_dims=check_dims,
385 input_derivative=INPUT_DERIVATIVE.DefaultOne,
--> 386 verbose=verbose)
387
388
/usr/local/lib/python2.7/dist-packages/tangent/grad_util.pyc in autodiff(func, wrt, optimized, motion, mode, preserve_result, check_dims, input_derivative, verbose)
288 # Generate the derivative
289 node, namespace = autodiff_tree(func, wrt, motion, mode, preserve_result,
--> 290 check_dims, verbose)
291
292 if mode == 'reverse' and motion == 'joint':
/usr/local/lib/python2.7/dist-packages/tangent/grad_util.pyc in autodiff_tree(func, wrt, motion, mode, preserve_result, check_dims, verbose)
142
143 node, required = autodiff_ast(func, wrt, motion, mode, preserve_result,
--> 144 check_dims, verbose)
145 final.body.extend(node.body)
146
/usr/local/lib/python2.7/dist-packages/tangent/grad_util.pyc in autodiff_ast(func, wrt, motion, mode, preserve_result, check_dims, verbose)
95 if mode == 'reverse':
96 node, required, stack = reverse_ad.reverse_ad(node.body[0], wrt,
---> 97 preserve_result, check_dims)
98 if verbose >= 2:
99 print('RAW')
/usr/local/lib/python2.7/dist-packages/tangent/reverse_ad.pyc in reverse_ad(node, wrt, preserve_result, check_dims)
841
842 ad = ReverseAD(wrt, preserve_result, check_dims)
--> 843 pri, adj = ad.visit(node)
844 mod = gast.Module(body=[pri, adj])
845 mod = annotate.find_stacks(mod)
/usr/local/lib/python2.7/dist-packages/tangent/reverse_ad.pyc in visit(self, node)
149 if anno.hasanno(node, 'active_in'):
150 self.active_variables = anno.getanno(node, 'active_in')
--> 151 pri, adj = visitor(node)
152
153 # Annotate primal and adjoint statements
/usr/local/lib/python2.7/dist-packages/tangent/reverse_ad.pyc in visit_FunctionDef(self, node)
212
213 # Perform AD on the function body
--> 214 body, adjoint_body = self.visit_statements(node.body[:-1])
215
216 # Annotate the first statement of the primal and adjoint as such
/usr/local/lib/python2.7/dist-packages/tangent/reverse_ad.pyc in visit_statements(self, nodes)
285 primals, adjoints = [], collections.deque()
286 for node in nodes:
--> 287 primal, adjoint = self.visit(node)
288 if not isinstance(primal, list):
289 primal = [primal]
/usr/local/lib/python2.7/dist-packages/tangent/reverse_ad.pyc in visit(self, node)
142 method = 'visit_' + node.__class__.__name__
143 if not hasattr(self, method):
--> 144 raise ValueError('Unknown node type: %s' % node.__class__.__name__)
145 visitor = getattr(self, method)
146
ValueError: Unknown node type: Print