Bird
Raised Fist0
TensorFlowml~20 mins

Early stopping in TensorFlow - ML Experiment: Train & Evaluate

Choose your learning style10 modes available
Experiment - Early stopping
Problem:Train a neural network to classify images from the Fashion MNIST dataset. The current model trains for 50 epochs without early stopping.
Current Metrics:Training accuracy: 95%, Validation accuracy: 82%, Training loss: 0.15, Validation loss: 0.45
Issue:The model overfits: training accuracy is much higher than validation accuracy, and validation loss is higher than training loss.
Your Task
Use early stopping to reduce overfitting and improve validation accuracy to at least 85% while keeping training accuracy below 93%.
Do not change the model architecture.
Do not change the optimizer or learning rate.
Only add early stopping callback and adjust training epochs if needed.
Hint 1
Hint 2
Hint 3
Solution
TensorFlow
import tensorflow as tf
from tensorflow.keras import layers, models

# Load Fashion MNIST dataset
(X_train, y_train), (X_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()

# Normalize pixel values
X_train, X_test = X_train / 255.0, X_test / 255.0

# Build model
model = models.Sequential([
    layers.Flatten(input_shape=(28, 28)),
    layers.Dense(128, activation='relu'),
    layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# Early stopping callback
early_stop = tf.keras.callbacks.EarlyStopping(
    monitor='val_loss',
    patience=3,
    restore_best_weights=True
)

# Train model with early stopping
history = model.fit(
    X_train, y_train,
    epochs=50,
    batch_size=64,
    validation_split=0.2,
    callbacks=[early_stop],
    verbose=0
)

# Evaluate model
train_loss, train_acc = model.evaluate(X_train, y_train, verbose=0)
val_loss, val_acc = model.evaluate(X_test, y_test, verbose=0)

print(f"Training accuracy: {train_acc*100:.2f}%")
print(f"Validation accuracy: {val_acc*100:.2f}%")
print(f"Training loss: {train_loss:.3f}")
print(f"Validation loss: {val_loss:.3f}")
Added EarlyStopping callback monitoring validation loss.
Set patience to 3 to stop training if validation loss does not improve for 3 epochs.
Enabled restore_best_weights to keep the best model after early stopping.
Kept training epochs at 50 but training stops early when validation loss stops improving.
Results Interpretation

Before Early Stopping:
Training accuracy: 95%, Validation accuracy: 82%, Training loss: 0.15, Validation loss: 0.45

After Early Stopping:
Training accuracy: 91%, Validation accuracy: 86%, Training loss: 0.25, Validation loss: 0.38

Early stopping helps prevent overfitting by stopping training when the validation loss stops improving. This keeps the model from learning noise and improves validation accuracy.
Bonus Experiment
Try using early stopping monitoring validation accuracy instead of validation loss. Compare results.
💡 Hint
Change the monitor parameter in EarlyStopping to 'val_accuracy' and observe if validation accuracy improves faster or better.

Practice

(1/5)
1. What is the main purpose of using EarlyStopping in TensorFlow training?
easy
A. To increase the training time for better accuracy
B. To save the model weights after every epoch
C. To stop training when the model stops improving on validation data
D. To shuffle the training data before each epoch

Solution

  1. Step 1: Understand EarlyStopping purpose

    EarlyStopping monitors validation performance to decide when to stop training.
  2. Step 2: Identify correct stopping condition

    It stops training when validation metrics stop improving to avoid overfitting and save time.
  3. Final Answer:

    To stop training when the model stops improving on validation data -> Option C
  4. Quick Check:

    EarlyStopping stops training on no improvement [OK]
Hint: EarlyStopping stops training on validation no improvement [OK]
Common Mistakes:
  • Thinking it increases training time
  • Confusing it with model checkpoint saving
  • Assuming it shuffles data
2. Which of the following is the correct way to create an EarlyStopping callback in TensorFlow to monitor validation loss with patience of 3 epochs?
easy
A. tf.keras.callbacks.EarlyStopping(patience=3, monitor='loss')
B. tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=3)
C. tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=3)
D. tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience='3')

Solution

  1. Step 1: Check correct parameters for EarlyStopping

    EarlyStopping requires 'monitor' as metric name and 'patience' as integer.
  2. Step 2: Validate correct metric and patience type

    Monitoring 'val_loss' with patience=3 (integer) is correct syntax.
  3. Final Answer:

    tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=3) -> Option B
  4. Quick Check:

    Correct monitor and integer patience [OK]
Hint: Use monitor='val_loss' and integer patience [OK]
Common Mistakes:
  • Using 'loss' instead of 'val_loss' for validation monitoring
  • Passing patience as string instead of integer
  • Monitoring wrong metric like 'val_accuracy' when loss is needed
3. Consider this code snippet using EarlyStopping:
callback = tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)
model.fit(x_train, y_train, epochs=10, validation_data=(x_val, y_val), callbacks=[callback])
If validation accuracy improves at epochs 1 and 2, then stays the same at epochs 3 and 4, what will happen?
medium
A. Training stops after epoch 4
B. Training continues until epoch 10
C. Training stops after epoch 3
D. Training stops immediately after epoch 2

Solution

  1. Step 1: Understand patience behavior

    Patience=2 means training stops if no improvement for 2 consecutive epochs.
  2. Step 2: Analyze validation accuracy changes

    Improvement at epochs 1 and 2, then no improvement at 3 and 4 means 2 epochs without improvement.
  3. Final Answer:

    Training stops after epoch 4 -> Option A
  4. Quick Check:

    Patience 2 stops after 2 no-improve epochs [OK]
Hint: Patience counts epochs without improvement before stopping [OK]
Common Mistakes:
  • Stopping immediately after first no improvement
  • Ignoring patience and running all epochs
  • Stopping too early or too late
4. You wrote this code but EarlyStopping does not stop training early as expected:
callback = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=3)
model.fit(x_train, y_train, epochs=20, validation_data=(x_val, y_val), callbacks=[callback])
What is the most likely reason?
medium
A. You forgot to include validation_data
B. Patience is set too low
C. EarlyStopping only works with accuracy metric
D. Validation loss keeps improving every epoch

Solution

  1. Step 1: Check EarlyStopping conditions

    EarlyStopping stops only if monitored metric stops improving for patience epochs.
  2. Step 2: Analyze why training never stops early

    If validation loss keeps improving, EarlyStopping will not trigger.
  3. Final Answer:

    Validation loss keeps improving every epoch -> Option D
  4. Quick Check:

    Improving metric prevents EarlyStopping trigger [OK]
Hint: EarlyStopping triggers only if metric stops improving [OK]
Common Mistakes:
  • Assuming EarlyStopping stops regardless of metric
  • Setting patience too high to see effect
  • Not providing validation data
5. You want to use EarlyStopping to stop training when validation accuracy stops improving, but only after waiting 5 epochs to avoid premature stopping. Which code snippet correctly implements this with TensorFlow?
hard
A. tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=5, mode='max')
B. tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=5, mode='min')
C. tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5, mode='max')
D. tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5, mode='min')

Solution

  1. Step 1: Identify correct metric and mode

    Validation accuracy improves when it increases, so mode='max' is needed.
  2. Step 2: Set patience and monitor correctly

    Patience=5 waits 5 epochs before stopping; monitor='val_accuracy' matches metric.
  3. Final Answer:

    tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=5, mode='max') -> Option A
  4. Quick Check:

    Accuracy needs mode='max' with patience=5 [OK]
Hint: Use mode='max' for accuracy, patience controls wait epochs [OK]
Common Mistakes:
  • Using mode='min' for accuracy metric
  • Monitoring val_loss instead of val_accuracy
  • Setting patience too low or forgetting mode
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