tf.TensorSpec

Describes the type of a tf.Tensor.

Inherits From: TypeSpec, TraceType

t = tf.constant([[1,2,3],[4,5,6]])
tf.TensorSpec.from_tensor(t)
TensorSpec(shape=(2, 3), dtype=tf.int32, name=None)

Contains metadata for describing the the nature of tf.Tensor objects accepted or returned by some TensorFlow APIs.

For example, it can be used to constrain the type of inputs accepted by a tf.function:

@tf.function(input_signature=[tf.TensorSpec([1, None])])
def constrained_foo(t):
  print("tracing...")
  return t

Now the tf.function is able to assume that t is always of the type tf.TensorSpec([1, None]) which will avoid retracing as well as enforce the type restriction on inputs.

As a result, the following call with tensor of type tf.TensorSpec([1, 2]) triggers a trace and succeeds:

>>> constrained_foo(tf.constant([[1., 2]])).numpy()
tracing...
array([[1., 2.]], dtype=float32)

The following subsequent call with tensor of type tf.TensorSpec([1, 4]) does not trigger a trace and succeeds:

>>> constrained_foo(tf.constant([[1., 2, 3, 4]])).numpy()
array([[1., 2., 3., 4.], dtype=float32)

But the following call with tensor of type tf.TensorSpec([2, 2]) fails:

>>> constrained_foo(tf.constant([[1., 2], [3, 4]])).numpy()
Traceback (most recent call last):
...
TypeError: Binding inputs to tf.function `constrained_foo` failed ...

shape Value convertible to tf.TensorShape. The shape of the tensor.
dtype Value convertible to tf.DType. The type of the tensor values.
name Optional name for the Tensor.

TypeError If shape is not convertible to a tf.TensorShape, or dtype is not convertible to a tf.DType.

dtype Returns the dtype of elements in the tensor.
name Returns the (optionally provided) name of the described tensor.
shape Returns the TensorShape that represents the shape of the tensor.
value_type The Python type for values that are compatible with this TypeSpec.

Methods

experimental_as_proto

View source

Returns a proto representation of the TensorSpec instance.

experimental_from_proto

View source

Returns a TensorSpec instance based on the serialized proto.

experimental_type_proto

View source

Returns the type of proto associated with TensorSpec serialization.

from_spec

View source

Returns a TensorSpec with the same shape and dtype as spec.

spec = tf.TensorSpec(shape=[8, 3], dtype=tf.int32, name="OriginalName")
tf.TensorSpec.from_spec(spec, "NewName")
TensorSpec(shape=(8, 3), dtype=tf.int32, name='NewName')

Args
spec The TypeSpec used to create the new TensorSpec.
name The name for the new TensorSpec. Defaults to spec.name.

from_tensor

View source

Returns a TensorSpec that describes tensor.

tf.TensorSpec.from_tensor(tf.constant([1, 2, 3]))
TensorSpec(shape=(3,), dtype=tf.int32, name=None)

Args
tensor The tf.Tensor that should be described.
name A name for the TensorSpec. Defaults to tensor.op.name.

Returns
A TensorSpec that describes tensor.

is_compatible_with

View source

Returns True if spec_or_tensor is compatible with this TensorSpec.

Two tensors are considered compatible if they have the same dtype and their shapes are compatible (see tf.TensorShape.is_compatible_with).

Args
spec_or_tensor A tf.TensorSpec or a tf.Tensor

Returns
True if spec_or_tensor is compatible with self.

is_subtype_of

View source

Returns True if self is a subtype of other.

Implements the tf.types.experimental.func.TraceType interface.

If not overridden by a subclass, the default behavior is to assume the TypeSpec is covariant upon attributes that implement TraceType and invariant upon rest of the attributes as well as the structure and type of the TypeSpec.

Args
other A TraceType object.

most_specific_common_supertype

View source

Returns the most specific supertype TypeSpec of self and others.

Implements the tf.types.experimental.func.TraceType interface.

If not overridden by a subclass, the default behavior is to assume the TypeSpec is covariant upon attributes that implement TraceType and invariant upon rest of the attributes as well as the structure and type of the TypeSpec.

Args
others A sequence of TraceTypes.

most_specific_compatible_type

View source

Returns the most specific TypeSpec compatible with self and other. (deprecated)

Deprecated. Please use most_specific_common_supertype instead. Do not override this function.

Args
other A TypeSpec.

Raises
ValueError If there is no TypeSpec that is compatible with both self and other.

__eq__

View source

Return self==value.

__ne__

View source

Return self!=value.