The difference between the two is muddled in my head, notwithstanding the nuances of what is eager and what isn't. From what I gather, the @tf.function
decorator has two benefits in that
if
into tf.cond
, etc.From the definition of tf.py_function
, it seems that it does just #2 above. Hence, why bother with tf.py_function
when tf.function
does the job with a performance improvement to boot and without the inability of the former to serialize?
They do indeed start to resemble each other as they are improved, so it is useful to see where they come from. Initially, the difference was that:
@tf.function
turns python code into a series of TensorFlow graph nodes.tf.py_function
wraps an existing python function into a single graph node.This means that tf.function
requires your code to be relatively simple while tf.py_function
can handle any python code, no matter how complex.
While this line is indeed blurring, with tf.py_function
doing more interpretation and tf.function
accepting lot's of complex python commands, the general rule stays the same:
tf.function
.tf.py_function
.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With