qml.math.requires_grad

requires_grad(tensor, interface=None)[source]

Returns True if the tensor is considered trainable.

Warning

The implemetation depends on the contained tensor type, and may be context dependent.

For example, Torch tensors and PennyLane tensors track trainability as a property of the tensor itself. TensorFlow, on the other hand, only tracks trainability if being watched by a gradient tape.

Parameters
  • tensor (tensor_like) – input tensor

  • interface (str) – The name of the interface. Will be determined automatically if not provided.

Example

Calling this function on a PennyLane NumPy array:

>>> x = np.array([1., 5.], requires_grad=True)
>>> requires_grad(x)
True
>>> x.requires_grad = False
>>> requires_grad(x)
False

PyTorch has similar behaviour.

With TensorFlow, the output is dependent on whether the tensor is currently being watched by a gradient tape:

>>> x = tf.Variable([0.6, 0.1])
>>> requires_grad(x)
False
>>> with tf.GradientTape() as tape:
...     print(requires_grad(x))
True

While TensorFlow constants are by default not trainable, they can be manually watched by the gradient tape:

>>> x = tf.constant([0.6, 0.1])
>>> with tf.GradientTape() as tape:
...     print(requires_grad(x))
False
>>> with tf.GradientTape() as tape:
...     tape.watch([x])
...     print(requires_grad(x))
True