Nathan
Nathan

Reputation: 10306

Programmatically Distinguishing Tensors, Variables, and Ops in TensorFlow

Is there a nice way to distinguish programmatically between tensors, variables, and ops in TensorFlow? This can come up, for example, when reloading a model and tf.local_variables() can have both tensors and variables in it. If you try to initialize a tensor, you get an error.

Below is some code for my current hack to get around this, but is there a better way? Part of the issue is that the type of variables, tensors, etc. is, e.g., tensorflow.python.ops.variables.Variable but it seems that tensorflow.python isn't accessible anymore (I think it was in some earlier releases?). The example only shows variables vs tensors, but I've also needed to distinguish ops from tensors before and had to use similar hacks.

import tensorflow as tf
vars_list = [tf.Variable(0), tf.constant(0)]
# init = tf.variables_initializer(vars_list) # -> AttributeError: 'Tensor' object has no attribute 'initializer'
var_type = type(tf.Variable(0))
init = tf.variables_initializer([v for v in vars_list if type(v) == var_type])

Upvotes: 0

Views: 120

Answers (1)

MWB
MWB

Reputation: 12567

Normally, in Python, one would use

isinstance(x, tf.Variable)

or

isinstance(x, (tf.Variable, tf.Tensor))

etc.

Upvotes: 1

Related Questions