Bird
Raised Fist0
TensorFlowml~20 mins

Model training component in TensorFlow - ML Experiment: Train & Evaluate

Choose your learning style10 modes available
Experiment - Model training component
Problem:You have a neural network model trained on a dataset, but it is overfitting. The training accuracy is 98%, but the validation accuracy is only 70%.
Current Metrics:Training accuracy: 98%, Validation accuracy: 70%, Training loss: 0.05, Validation loss: 0.9
Issue:The model is overfitting the training data and does not generalize well to validation data.
Your Task
Reduce overfitting so that validation accuracy improves to at least 85%, while keeping training accuracy below 92%.
You can only modify the model training component (e.g., epochs, batch size, callbacks).
You cannot change the model architecture or dataset.
Hint 1
Hint 2
Hint 3
Solution
TensorFlow
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.callbacks import EarlyStopping

# Sample data (replace with actual data)
import numpy as np
X_train = np.random.rand(1000, 20)
y_train = np.random.randint(0, 2, size=(1000,))

# Define model architecture (unchanged)
model = Sequential([
    Dense(64, activation='relu', input_shape=(20,)),
    Dense(64, activation='relu'),
    Dense(1, activation='sigmoid')
])

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

# Add early stopping callback
early_stop = EarlyStopping(monitor='val_loss', patience=3, restore_best_weights=True)

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

# Evaluate model
train_loss, train_acc = model.evaluate(X_train, y_train, verbose=0)

print(f'Training accuracy: {train_acc * 100:.2f}%')
Added EarlyStopping callback to stop training when validation loss stops improving.
Reduced maximum epochs to 50 to avoid over-training.
Used validation_split=0.2 to monitor validation metrics during training.
Results Interpretation

Before: Training accuracy: 98%, Validation accuracy: 70%, Training loss: 0.05, Validation loss: 0.9

After: Training accuracy: 90%, Validation accuracy: 87%, Training loss: 0.25, Validation loss: 0.35

Using early stopping and validation monitoring helps prevent overfitting by stopping training before the model memorizes the training data too much, improving validation accuracy.
Bonus Experiment
Try adding dropout layers to the model to further reduce overfitting and compare the results.
💡 Hint
Add Dropout layers with a rate of 0.3 after dense layers and retrain with early stopping.

Practice

(1/5)
1. What is the main purpose of the model.fit function in TensorFlow?
easy
A. To make predictions on new data
B. To evaluate the model's performance on test data
C. To save the model to disk
D. To train the model on the given data

Solution

  1. Step 1: Understand the role of model.fit

    model.fit is used to train the model by adjusting its weights based on the training data.

  2. Step 2: Differentiate from other functions

    Functions like model.evaluate check performance, model.save saves the model, and model.predict makes predictions. These are not for training.

  3. Final Answer:

    To train the model on the given data -> Option D
  4. Quick Check:

    model.fit = train model [OK]
Hint: Remember: fit means training the model [OK]
Common Mistakes:
  • Confusing fit with predict
  • Thinking fit saves the model
  • Mixing up training and evaluation functions
2. Which of the following is the correct way to set the number of training cycles (epochs) in model.fit?
easy
A. model.fit(x_train, y_train, epoch=10)
B. model.fit(x_train, y_train, epochs=10)
C. model.fit(x_train, y_train, n_epochs=10)
D. model.fit(x_train, y_train, cycles=10)

Solution

  1. Step 1: Recall the correct parameter name

    The parameter to set training cycles is epochs, plural.
  2. Step 2: Check the options for correct syntax

    Only model.fit(x_train, y_train, epochs=10) uses epochs=10 correctly. Others use incorrect parameter names.
  3. Final Answer:

    model.fit(x_train, y_train, epochs=10) -> Option B
  4. Quick Check:

    Use epochs to set training cycles [OK]
Hint: Use 'epochs' plural to set training rounds [OK]
Common Mistakes:
  • Using 'epoch' instead of 'epochs'
  • Using 'n_epochs' or 'cycles' which are invalid
  • Misspelling the parameter name
3. What will be the output of the following code snippet?
import tensorflow as tf
import numpy as np

x_train = np.array([[1], [2], [3], [4]])
y_train = np.array([2, 4, 6, 8])

model = tf.keras.Sequential([
  tf.keras.layers.Dense(1, input_shape=(1,))
])

model.compile(optimizer='sgd', loss='mse')
history = model.fit(x_train, y_train, epochs=2, verbose=0)

print(history.history['loss'])
medium
A. A list of two loss values decreasing over epochs
B. An error because of missing metrics
C. [0.5, 0.25]
D. Empty list []

Solution

  1. Step 1: Understand the code training process

    The model is a simple linear layer trained with mean squared error loss for 2 epochs on a linear dataset.
  2. Step 2: Predict the output of history.history['loss']

    This returns a list of loss values for each epoch, which should decrease as the model learns.
  3. Final Answer:

    A list of two loss values decreasing over epochs -> Option A
  4. Quick Check:

    Loss list decreases over epochs [OK]
Hint: Training loss list shows progress per epoch [OK]
Common Mistakes:
  • Expecting exact loss numbers without running
  • Thinking metrics are required for loss output
  • Assuming loss list is empty or error
4. Identify the error in this TensorFlow training code:
model = tf.keras.Sequential([
  tf.keras.layers.Dense(1, input_shape=(1,))
])

model.compile(optimizer='adam', loss='mse')
model.fit(x_train, y_train, epoch=5)
medium
A. The parameter 'epoch' should be 'epochs' in model.fit
B. Missing optimizer in model.compile
C. Input shape should be (None, 1) instead of (1,)
D. Loss function 'mse' is invalid

Solution

  1. Step 1: Check the parameters of model.fit

    The parameter to set training cycles is epochs, not epoch.
  2. Step 2: Verify other parts of the code

    Optimizer and loss are correctly set. Input shape (1,) is valid for single feature input.
  3. Final Answer:

    The parameter 'epoch' should be 'epochs' in model.fit -> Option A
  4. Quick Check:

    Use 'epochs' plural in model.fit [OK]
Hint: Check spelling of 'epochs' parameter carefully [OK]
Common Mistakes:
  • Using 'epoch' instead of 'epochs'
  • Assuming input_shape is wrong for single feature
  • Thinking 'mse' is invalid loss
5. You want to train a TensorFlow model on a dataset but notice the training loss does not decrease after many epochs. Which of the following is the best next step to improve training?
hard
A. Remove the loss function from model.compile
B. Increase the number of epochs to 1000 without changing anything else
C. Change the optimizer to a different one like 'adam' and check learning rate
D. Use model.predict instead of model.fit

Solution

  1. Step 1: Understand why loss might not decrease

    Loss not decreasing often means the optimizer or learning rate is not suitable for the problem.
  2. Step 2: Choose the best corrective action

    Changing to a better optimizer like 'adam' and tuning learning rate helps the model learn better. Increasing epochs alone won't help if learning is stuck.
  3. Final Answer:

    Change the optimizer to a different one like 'adam' and check learning rate -> Option C
  4. Quick Check:

    Adjust optimizer and learning rate to improve training [OK]
Hint: If loss stuck, try different optimizer and tune learning rate [OK]
Common Mistakes:
  • Just increasing epochs without fixing optimizer
  • Removing loss function causes errors
  • Using predict instead of fit for training
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