Bird
Raised Fist0
TensorFlowml~15 mins

GradientTape for automatic differentiation in TensorFlow - ML Experiment: Train & Evaluate

Choose your learning style10 modes available
Experiment - GradientTape for automatic differentiation
Problem:You want to compute the gradient of a simple function y = x^2 + 3x + 2 with respect to x using TensorFlow's GradientTape. Currently, you have code that calculates the function value but does not compute or print the gradient.
Current Metrics:No gradient computed or printed.
Issue:The model does not show how to use GradientTape to automatically compute derivatives, which is essential for training machine learning models.
Your Task
Modify the code to use TensorFlow's GradientTape to compute and print the gradient of y with respect to x.
Use TensorFlow 2.x API.
Do not change the function y = x^2 + 3x + 2.
Keep the code simple and clear.
Hint 1
Hint 2
Hint 3
Solution
TensorFlow
import tensorflow as tf

# Define the variable x
x = tf.Variable(3.0)

with tf.GradientTape() as tape:
    y = x ** 2 + 3 * x + 2

# Compute the gradient of y with respect to x
grad = tape.gradient(y, x)

print(f"Function value y at x=3: {y.numpy()}")
print(f"Gradient dy/dx at x=3: {grad.numpy()}")
Added tf.Variable for x to track it for differentiation.
Used tf.GradientTape() context to record operations.
Computed gradient using tape.gradient(y, x).
Printed the gradient value.
Results Interpretation

Before: No gradient computed or printed.

After: Gradient dy/dx at x=3 is 9.0, which matches the analytical derivative 2*x + 3 = 2*3 + 3 = 9.

TensorFlow's GradientTape lets you automatically compute derivatives by recording operations on variables. This is the foundation for training models using gradient-based optimization.
Bonus Experiment
Try computing the gradient of y = sin(x) + x^3 at x = 2 using GradientTape.
💡 Hint
Define y inside the tape context as y = tf.sin(x) + x ** 3 and compute gradient similarly.

Practice

(1/5)
1. What is the main purpose of TensorFlow's GradientTape?
easy
A. To automatically compute derivatives of operations for optimization
B. To visualize the model architecture
C. To load datasets for training
D. To save the trained model to disk

Solution

  1. Step 1: Understand what GradientTape records

    GradientTape records operations on tensors to compute gradients automatically.
  2. Step 2: Connect gradients to optimization

    These gradients help update model parameters during training to minimize loss.
  3. Final Answer:

    To automatically compute derivatives of operations for optimization -> Option A
  4. Quick Check:

    GradientTape = automatic differentiation [OK]
Hint: GradientTape records ops to find derivatives fast [OK]
Common Mistakes:
  • Thinking GradientTape is for data loading
  • Confusing it with model saving functions
  • Assuming it visualizes model structure
2. Which of the following is the correct way to start recording operations with GradientTape in TensorFlow?
easy
A. GradientTape.record()
B. tf.GradientTape.start()
C. with tf.GradientTape() as tape:
D. tf.GradientTape.begin()

Solution

  1. Step 1: Recall the syntax for using GradientTape

    GradientTape is used as a context manager with the with statement.
  2. Step 2: Identify the correct syntax

    The correct syntax is with tf.GradientTape() as tape: to start recording.
  3. Final Answer:

    with tf.GradientTape() as tape: -> Option C
  4. Quick Check:

    Use 'with' block for GradientTape [OK]
Hint: GradientTape always used inside a 'with' block [OK]
Common Mistakes:
  • Trying to call start() or begin() methods which don't exist
  • Not using 'with' statement
  • Using incorrect method names like record()
3. What will be the output of this code snippet?
import tensorflow as tf
x = tf.constant(3.0)
with tf.GradientTape() as tape:
    tape.watch(x)
    y = x * x + 2 * x + 1
dy_dx = tape.gradient(y, x)
print(dy_dx.numpy())
medium
A. 9.0
B. 11.0
C. 5.0
D. 8.0

Solution

  1. Step 1: Analyze the function

    The code defines y = x*x + 2*x + 1 with x = tf.constant(3.0).
  2. Step 2: Compute the derivative

    The derivative dy/dx = 2*x + 2. At x=3.0, this is 2*3 + 2 = 8.0.
  3. Step 3: Verify code execution

    tape.watch(x) enables gradient tracking. tape.gradient(y, x) returns 8.0, printed via .numpy().
  4. Final Answer:

    8.0 -> Option D
  5. Quick Check:

    2*3 + 2 = 8.0 [OK]
Hint: Derivative of x²+2x+1 is 2x+2; plug in x=3 [OK]
Common Mistakes:
  • Forgetting to watch the tensor x
  • Miscomputing the derivative formula
  • Confusing y with x in gradient call
4. Identify the error in this TensorFlow code using GradientTape:
import tensorflow as tf
x = tf.constant(2.0)
with tf.GradientTape() as tape:
    y = x * x
dy_dx = tape.gradient(y, x)
print(dy_dx.numpy())
medium
A. x is not watched, so gradient is None
B. GradientTape must be used without 'with' block
C. y should be defined outside the tape block
D. tape.gradient requires a list of variables

Solution

  1. Step 1: Check if x is watched

    x is a constant and not watched by default, so gradient will be None.
  2. Step 2: Understand how to fix

    Use tape.watch(x) to track x for gradient calculation.
  3. Final Answer:

    x is not watched, so gradient is None -> Option A
  4. Quick Check:

    Must watch constants for gradients [OK]
Hint: Watch constants explicitly to get gradients [OK]
Common Mistakes:
  • Assuming constants are watched automatically
  • Misusing GradientTape without 'with' block
  • Passing wrong arguments to gradient()
5. You want to compute gradients of a function f(x, y) = x^2 * y + y^3 with respect to both x and y. Which code snippet correctly computes both gradients using TensorFlow's GradientTape?
hard
A. with tf.GradientTape() as tape: x = tf.constant(2.0) y = tf.constant(3.0) f = x**2 * y + y**3 grads = tape.gradient(f, x, y) print(grads)
B. with tf.GradientTape() as tape: x = tf.constant(2.0) y = tf.constant(3.0) tape.watch([x, y]) f = x**2 * y + y**3 grads = tape.gradient(f, [x, y]) print(grads)
C. with tf.GradientTape() as tape: x = tf.constant(2.0) y = tf.constant(3.0) tape.watch(x) f = x**2 * y + y**3 grads = tape.gradient(f, y) print(grads)
D. with tf.GradientTape() as tape: x = tf.constant(2.0) y = tf.constant(3.0) tape.watch(x) tape.watch(y) f = x**2 * y + y**3 grads = tape.gradient(f, [x, y]) print(grads)

Solution

  1. Step 1: Understand watching variables

    Constants must be watched explicitly to compute gradients.
  2. Step 2: Check gradient call syntax

    GradientTape.gradient expects a list of variables to compute gradients for multiple variables.
  3. Step 3: Compare options

    with tf.GradientTape() as tape: x = tf.constant(2.0) y = tf.constant(3.0) tape.watch([x, y]) f = x**2 * y + y**3 grads = tape.gradient(f, [x, y]) print(grads) calls tape.watch([x, y]) once with a list, then passes [x, y] to gradient().
  4. Final Answer:

    Explicitly watch both x and y together and pass [x, y] to tape.gradient(f, [x, y]) -> Option B
  5. Quick Check:

    Watch all variables as list and pass as list to gradient() [OK]
Hint: Watch all variables and pass as list to gradient() [OK]
Common Mistakes:
  • Not watching all variables
  • Passing variables separately instead of as list
  • Computing gradient for only one variable
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard