Python – tensorflow.GradientTape.jacobian()
TensorFlow 是由 Google 设计的开源Python库,用于开发机器学习模型和深度学习神经网络。
jacobian()用于使用记录在该磁带上下文中的操作来计算 jacobian。
Syntax: jacobian( target, source, unconnected_gradients, parallel_iterations, experimental_use_pfor )
Parameters:
- target: It is a Tensor having minimum rank 2.
- source: It is a Tensor having minimum rank 2.
- unconnected_gradients(optional): It’s value can either be zero or None. Default value is None.
- parallel_iterations(optional): It is used to control parallel iterations and memory usage.
- experimental_use_pfor(optional): It is a boolean with default value True. It uses pfor to calculate jacobian when set to true otherwise tf.while_loop is used.
Returns: It returns a Tensor.
示例 1:
Python3
# Importing the library
import tensorflow as tf
x = tf.constant([[4, 2],[1, 3]], dtype=tf.dtypes.float32)
# Using GradientTape
with tf.GradientTape() as gfg:
gfg.watch(x)
y = x * x * x
# Computing jacobian
res = gfg.jacobian(y, x)
# Printing result
print("res: ",res)
Python3
# Importing the library
import tensorflow as tf
x = tf.constant([[4, 2],[1, 3]], dtype=tf.dtypes.float32)
# Using GradientTape
with tf.GradientTape() as gfg:
gfg.watch(x)
# Using nested GradientTape for calculating higher order jacobian
with tf.GradientTape() as gg:
gg.watch(x)
y = x * x * x
# Computing first order jacobian
first_order = gg.jacobian(y, x)
# Computing Second order jacobian
second_order = gfg.batch_jacobian(first_order, x)
# Printing result
print("first_order: ",first_order)
print("second_order: ",second_order)
输出:
res: tf.Tensor(
[[[[48. 0.]
[ 0. 0.]]
[[ 0. 12.]
[ 0. 0.]]]
[[[ 0. 0.]
[ 3. 0.]]
[[ 0. 0.]
[ 0. 27.]]]], shape=(2, 2, 2, 2), dtype=float32)
示例 2:
Python3
# Importing the library
import tensorflow as tf
x = tf.constant([[4, 2],[1, 3]], dtype=tf.dtypes.float32)
# Using GradientTape
with tf.GradientTape() as gfg:
gfg.watch(x)
# Using nested GradientTape for calculating higher order jacobian
with tf.GradientTape() as gg:
gg.watch(x)
y = x * x * x
# Computing first order jacobian
first_order = gg.jacobian(y, x)
# Computing Second order jacobian
second_order = gfg.batch_jacobian(first_order, x)
# Printing result
print("first_order: ",first_order)
print("second_order: ",second_order)
输出:
first_order: tf.Tensor(
[[[[48. 0.]
[ 0. 0.]]
[[ 0. 12.]
[ 0. 0.]]]
[[[ 0. 0.]
[ 3. 0.]]
[[ 0. 0.]
[ 0. 27.]]]], shape=(2, 2, 2, 2), dtype=float32)
second_order: tf.Tensor(
[[[[[[24. 0.]
[ 0. 0.]]
[[ 0. 0.]
[ 0. 0.]]]
[[[ 0. 0.]
[ 0. 0.]]
[[ 0. 0.]
[ 0. 0.]]]]
[[[[ 0. 0.]
[ 0. 0.]]
[[ 0. 12.]
[ 0. 0.]]]
[[[ 0. 0.]
[ 0. 0.]]
[[ 0. 0.]
[ 0. 0.]]]]]
[[[[[ 0. 0.]
[ 0. 0.]]
[[ 0. 0.]
[ 0. 0.]]]
[[[ 0. 0.]
[ 6. 0.]]
[[ 0. 0.]
[ 0. 0.]]]]
[[[[ 0. 0.]
[ 0. 0.]]
[[ 0. 0.]
[ 0. 0.]]]
[[[ 0. 0.]
[ 0. 0.]]
[[ 0. 0.]
[ 0. 18.]]]]]], shape=(2, 2, 2, 2, 2, 2), dtype=float32)