Skip to content
This repository was archived by the owner on Dec 2, 2023. It is now read-only.
This repository was archived by the owner on Dec 2, 2023. It is now read-only.

print not supported in autograd #86

@tonyyang-svail

Description

@tonyyang-svail

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions