When training a model, we watch metrics like loss and accuracy over time (epochs). Loss shows how well the model fits the data; lower is better. Accuracy shows how many predictions are correct; higher is better. Visualizing these helps us see if the model is learning or stuck.
Training history and visualization in TensorFlow - Model Metrics & Evaluation
Start learning this pattern below
Jump into concepts and practice - no test required
Training history visualization usually shows line charts of loss and accuracy for both training and validation sets over epochs.
Epoch | Train Loss | Val Loss | Train Acc | Val Acc
-----------------------------------------------
1 | 0.65 | 0.70 | 0.60 | 0.58
2 | 0.50 | 0.55 | 0.75 | 0.70
3 | 0.40 | 0.45 | 0.82 | 0.78
... | ... | ... | ... | ...
This table is often shown as a line graph with epochs on the x-axis and metric values on the y-axis.
While training history focuses on loss and accuracy, precision and recall are also important metrics to track, especially for imbalanced data. Sometimes improving precision lowers recall and vice versa. Watching training history helps us decide if the model is improving overall or just memorizing.
For example, if validation loss stops improving but training loss keeps dropping, the model might be overfitting, hurting recall or precision on new data.
Good: Training and validation loss both decrease smoothly and stabilize close together. Accuracy improves steadily on both sets.
Bad: Training loss keeps dropping but validation loss rises (overfitting). Accuracy on validation stays low or fluctuates wildly (underfitting or data issues).
- Ignoring validation metrics: Only watching training loss can hide overfitting.
- Misinterpreting fluctuations: Small ups and downs are normal; don't panic early.
- Not using early stopping: Without it, model may overfit after many epochs.
- Data leakage: If validation data leaks into training, metrics look too good but model fails in real use.
No, this suggests overfitting. The model fits training data well (high accuracy) but performs worse on new data (rising validation loss). You should stop training earlier or use regularization.
Practice
history.history object store after training a TensorFlow model?Solution
Step 1: Understand what
After training, TensorFlow'shistory.historycontainsmodel.fit()returns a history object that stores metrics like loss and accuracy for each epoch.Step 2: Identify the correct stored data
Thehistory.historydictionary holds lists of loss and accuracy values recorded at each epoch for training and validation.Final Answer:
Loss and accuracy values for each epoch during training -> Option CQuick Check:
Training metrics stored inhistory.history= Loss and accuracy values for each epoch during training [OK]
- Confusing history with model architecture
- Thinking history stores the dataset
- Assuming history holds optimizer state
Solution
Step 1: Recall how to access metrics in history object
The history object stores metrics in a dictionary underhistory.history. Access keys like 'accuracy' and 'val_accuracy' as dictionary keys.Step 2: Use matplotlib to plot lists from the dictionary
Useplt.plot()withhistory.history['accuracy']andhistory.history['val_accuracy']to plot training and validation accuracy.Final Answer:
plt.plot(history.history['accuracy']); plt.plot(history.history['val_accuracy']) -> Option AQuick Check:
Access metrics viahistory.history['key']for plotting [OK]
- Using dot notation instead of dictionary keys
- Calling metrics as functions
- Accessing history directly without .history
print(history.history['loss']) after training for 3 epochs?
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) history = model.fit(x_train, y_train, epochs=3, validation_data=(x_val, y_val)) print(history.history['loss'])
Solution
Step 1: Understand what
It stores the loss values recorded at the end of each epoch during training as a list.history.history['loss']containsStep 2: Predict the output after 3 epochs
Since training runs for 3 epochs, the list will have 3 float values representing loss per epoch, not just one or a fixed list.Final Answer:
A list of 3 loss values, one per epoch -> Option AQuick Check:
Loss per epoch stored as list = A list of 3 loss values, one per epoch [OK]
- Expecting a single float instead of a list
- Assuming fixed loss values without training
- Thinking 'loss' key is missing
import matplotlib.pyplot as plt plt.plot(history['loss']) plt.plot(history['val_loss']) plt.show()
Solution
Step 1: Check how history metrics are accessed
The history object stores metrics inside thehistoryattribute, so direct access likehistory['loss']is incorrect.Step 2: Correct the access to
To fix, usehistory.history['loss']history.history['loss']andhistory.history['val_loss']for plotting.Final Answer:
history should be accessed as history.history, not directly -> Option BQuick Check:
Access metrics via history.history, not history [OK]
- Accessing history metrics directly
- Assuming plt.plot can't plot lists
- Thinking missing title causes error
Solution
Step 1: Interpret the training and validation loss curves
When training loss decreases but validation loss increases, it indicates the model is overfitting the training data.Step 2: Decide actions based on visualization
Visualizing history helps identify overfitting, suggesting to stop early, add dropout, or use regularization to improve generalization.Final Answer:
It shows overfitting, so you might stop training early or add regularization -> Option DQuick Check:
Increasing validation loss with decreasing training loss = overfitting [OK]
- Ignoring validation loss trends
- Increasing learning rate without reason
- Assuming data is wrong without checking
