Description
There are situations where a TF API, e.g., tf.nn.relu()
, can "generate" a tensor and have one just "pass through." In the summary representation, there isn't a way to express this, and it's dependent on the type of argument passed to the API.
Consider the following example based on the one at https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/nn/relu:
import tensorflow as tf
from tensorflow.python.framework.ops import EagerTensor
a = [-2., 0., 3.]
assert(type(a) == list)
b = tf.nn.relu(a)
assert(type(b) == EagerTensor)
In this case, the API is seemingly converting the given list
to a tensor. Such API are typically represented as tensor generators in Ariadne (i.e., the call the sentinel read_data()
). But, in another example with the same API, it can accept a tensor without conversion:
import tensorflow as tf
from tensorflow.python.framework.ops import EagerTensor
a = tf.constant([-2., 0., 3.])
assert(type(a) == EagerTensor)
b = tf.nn.relu(a)
assert(type(b) == EagerTensor)
In this case, the API is a "pass through" API; it doesn't create a new tensor but rather modifies an existing one.
My feeling is that such API can't be solely represented in the summaries. I believe that there are other API like this, e.g., reshape()
.