Views
No views yet
conv5 block, meaning only the final convolutional block (conv5) and the custom head were fine-tuned. This prevents early layers, which are optimized for high-resolution images, from being corrupted by the 48x48 input.| Technique | Rationale |
|---|---|
| Class Weighting | Applied inverse frequency weights to mitigate the severe class imbalance (e.g., Disgust is rare, Happy is abundant). |
| Data Augmentation | Used random flips, translations, rotations, and zooms to artificially expand the small dataset and combat overfitting. |
| High Dropout | Increased dropout to 0.5 to aggressively regularize the model and prevent the divergence seen in earlier training runs. |
| Optimizer | Adam with a very low fine-tuning learning rate of 5e-6. |
| Metric | Result |
|---|---|
| Test Accuracy | 45.70% |
| Test Loss | 1.4929 |
| Training Accuracy (End) | 63.25% |
| Emotion | F1-Score | Support (Test Count) | Notes |
|---|---|---|---|
| Neutral | 0.6386 | 831 | Highest precision, well-distinguished class. |
| Happy | 0.6037 | 1774 | Strongest recall, the most abundant class. |
| Disgust | 0.4659 | 111 | Significantly improved performance on this rare class. |
| Sad | $0.3995$ | 1233 | Ambiguous. |
| Surprise | 0.3531 | 1247 | Ambiguous. |
| Fear | 0.3374 | 1024 | Ambiguous. |
| Angry | 0.3312 | 958 | Lowest F1-score, indicating high confusion. |
tensorflow (for loading the model)numpy (for array manipulation)ValueError upon loading, ensure you are loading the model with the .keras extension:1import tensorflow as tf
2loaded_model = tf.keras.models.load_model("./best_fer_resnet_local/best_model.keras")