Rúbrica PR5072/02: Deep Learning amb Keras/TensorFlow
Mòdul: 5072 Sistemes d'Aprenentatge Automàtic
Pràctica: PR5072/02 — Deep Learning amb Keras/TensorFlow i Docker
Hores estimades: 8 hores
Lliurament: Notebook .ipynb + model .keras + informe PDF
Criteris d'avaluació
| Criteri | Pes | Excel·lent (9-10) | Notable (7-8) | Aprovat (5-6) | Insuficient (<5) |
|---|---|---|---|---|---|
| Configuracio Docker | 10% | Contenidor TF-Jupyter arrencat correctament, volums muntats (notebooks, logs, models), port 6006 per a TensorBoard exposat | Contenidor arrencat sense TensorBoard | Contenidor functional amb problemes de volums | Docker no usat o no funcional |
| Arquitectura CNN | 25% | Functional API correctament usada, almenys 3 blocs conv (Conv2D + BatchNorm + Pooling), Dropout present, GlobalAveragePooling2D, cap Dense + Softmax; justificada cada capa | Arquitectura correcta amb 2+ blocs conv, BatchNorm present | Arquitectura basica funcional (Sequential simple, sense BatchNorm) | Arquitectura incorrecta o model que no entrena |
| Entrenament i callbacks | 20% | EarlyStopping, ModelCheckpoint, ReduceLROnPlateau i TensorBoard implementats i justificats; corbes d'entrenament mostrades; epochs efectius coherents | Almenys 3 callbacks implementats correctament | EarlyStopping present, entrenament funcional | Sense callbacks; entrenament manual fix d'epochs |
| Analisi de resultats | 20% | Corbes accuracy+loss, matriu de confusio amb categories, analisi d'errors (exemples mal classificats), identificacio de les categories mes difícils | Corbes + matriu de confusio correcta | Nomes metriques numeriques (accuracy, loss) | Sense analisi visual dels resultats |
| Transfer Learning | 20% | MobileNetV3 implementat amb les dues fases (cap + fine-tuning), learning rates diferenciats, comparativa CNN vs TL amb grafics i taula | Transfer Learning implementat correctament (fase 1 o fase 2) | Intenta implementar TL amb errors parcials | Absent o codi copia sense execucio |
| Qualitat del codi | 10% | Codi net, funcions documentades, variable ALUMNE/ALUMNE_ID a tot arreu, random_state/seed fixos, noms descriptius per a capes |
Codi llegible amb comentaris, ALUMNE present | Codi funcional amb poca documentacio | Codi desordenat, sense comentaris, noms genèrics |
| Personalitzacio | 5% | Nom visible a: variable ALUMNE, nom del model Keras (name=), fitxers desats (.keras, .json, .png), nom del contenidor Docker |
Nom als fitxers i variable ALUMNE | Nom parcialment present | Absent |
Detall dels criteris
Configuració Docker (10%)
Per obtenir la maxima nota:
- Ordre
docker runamb--name keras-[nom-alumne] - Volums muntats per a notebooks, logs (TensorBoard) i models desats
- Port 6006 exposat per a TensorBoard (evidencia d'us recomanada, no obligatoria)
--shm-size=2go superior per evitar errors de memoria compartida- Evidencia d'execucio al notebook (versio TF, dispositius disponibles)
# Cel·la esperada al notebook
import tensorflow as tf
print(f"TensorFlow: {tf.__version__}")
print(f"GPU: {tf.config.list_physical_devices('GPU')}")
Arquitectura CNN (25%)
L'arquitectura ha de demostrar comprensio dels elements clau de les CNN:
| Element | Requisit minim | Excel·lent |
|---|---|---|
| Blocs convolucionals | 2 blocs Conv2D | 3+ blocs amb filtres creixents (32->64->128) |
| Normalitzacio | BatchNormalization present | BatchNorm despres de cada Conv2D |
| Regularitzacio | Dropout en algun punt | Dropout despres de Pooling i al cap Dense |
| Pooling | MaxPooling2D | MaxPooling2D + GlobalAveragePooling2D al final |
| Cap de classificacio | Dense + Softmax | Dense(256) + Dropout + Dense(10, softmax) |
| Functional API | Usada | Usada i justificada (per que no Sequential?) |
| Data Augmentation | Opcional | Implementada com a capes Keras (RandomFlip, etc.) |
Functional API vs Sequential
El model basic amb keras.Sequential es acceptable per a l'aprovat. Per a notable i excel·lent s'espera la Functional API amb keras.Input i keras.Model, que permet architectures mes complexes i millor documentacio del graf.
Entrenament i callbacks (20%)
Callbacks avaluats:
| Callback | Configuracio minima | Configuracio excel·lent |
|---|---|---|
| EarlyStopping | patience=10 |
monitor='val_accuracy', restore_best_weights=True |
| ModelCheckpoint | save_best_only=True |
Fitxer amb nom alumne, monitor correcte |
| ReduceLROnPlateau | factor=0.5 |
patience=5, min_lr=1e-6 |
| TensorBoard | Log dir configurat | Log dir amb nom alumne i data |
| CSVLogger | No obligatori | Bonus si present |
Les corbes d'entrenament han de mostrar:
- Accuracy i loss per a train i validacio
- Learning rate al llarg del temps (si ReduceLROnPlateau actua)
- Identificacio de l'epoch on EarlyStopping atura l'entrenament
Anàlisi de resultats (20%)
L'analisi ha d'incloure com a minim:
- Accuracy i loss finals al conjunt de test (no validacio)
- Matriu de confusio amb els noms de les categories en catala
- Identificacio de les 2-3 categories mes confoses entre si
- Visualitzacio d'exemples mal classificats (almenys 9 exemples)
- Comentari sobre per quin motiu s'equivoca el model en cada cas
Analisi addicional per a excellent:
- Grad-CAM o mapes d'activacio per visualitzar que aprèn la xarxa
- Top-3 accuracy (quantes vegades la classe correcta esta entre les 3 primeres)
- Analisi de la confianca: distribucio de les probabilitats maximes per errors vs encerts
Transfer Learning (20%)
S'han d'implementar les dues fases:
Fase 1 - Entrenament del cap:
- Base MobileNetV3 congelada (base_model.trainable = False)
- Nomes s'entrenen les capes del cap afegit
- Learning rate normal (0.001)
- Epochs: 15-25
Fase 2 - Fine-tuning: - Descongelar les ultimes 15-25 capes de la base - Recompilar amb learning rate molt menor (1e-5 o menys) - Epochs: 10-20
La comparativa ha d'incloure: - Taula: accuracy CNN pròpia vs TL en el conjunt de test - Grafic de barres comparatiu - Temps d'entrenament (epochs fins a convergencia) - Conclusions sobre quan usar TL vs CNN des de zero
Qualitat del codi (10%)
# Exemple de codi de qualitat excellent
ALUMNE = "Joan Garcia"
ALUMNE_ID = "joan_garcia"
def build_cnn(input_shape=(28, 28, 1), num_classes=10, alumne_id=ALUMNE_ID):
"""
Construeix la CNN per a Fashion MNIST.
Args:
input_shape: Dimensions de l'imatge d'entrada (H, W, C)
num_classes: Nombre de categories a classificar
alumne_id: Identificador de l'alumne per als noms dels elements
Returns:
model: Model Keras compilable
"""
inputs = keras.Input(shape=input_shape, name='input')
# ...
model = keras.Model(inputs, outputs, name=f'CNN_{alumne_id}')
return model
Personalització (5%)
Llista de verificacio:
-
ALUMNE = "Joan Garcia"(o nom real) -
ALUMNE_ID = "joan_garcia"(o nom real) - Model Keras:
keras.Model(..., name=f'CNN_{ALUMNE_ID}') - Fitxer model:
model_final_joan_garcia.keras - Fitxer metadata:
metadata_model_joan_garcia.json - Grafics:
corbes_joan_garcia.png, etc. - Contenidor Docker:
--name keras-joan-garcia
Taula de puntuació
| Nota | Descripció |
|---|---|
| 9-10 | Excel·lent: CNN ben dissenyada, transfer learning complet amb les dues fases, analisi profunda incloent exemples d'error, conclusions riques, codi de qualitat professional. |
| 7-8 | Notable: Tots els elements implementats correctament. Pot faltar algun element d'analisi avancada o un callback. |
| 5-6 | Aprovat: CNN funcional, TF configurat en Docker, resultats basicos presents, transfer learning implementat (potser nomes fase 1). |
| 3-4 | Insuficient: Manca el transfer learning, o el notebook no funciona completament, o l'analisi es molt superficial. |
| 0-2 | No presentat o no funcional: el notebook no executa o manca mes de la meitat dels continguts. |
Penalitzacions
| Situació | Penalització |
|---|---|
| Accuracy CNN < 88% al test (sense justificacio) | -1 punt |
| Transfer Learning absent | -2 punts |
| Notebook no executat de dalt a baix | -2 punts |
| Nom de l'alumne absent als fitxers | -1 punt |
| Lliurament fora de termini (1-3 dies) | -1 punt per dia |
| Plagi detectat | 0 (cas academic) |
Rúbrica de les preguntes de reflexió
Cada pregunta aporta dins el criteri "Analisi de resultats" i l'informe final.
| Pregunta | Resposta minima acceptable | Resposta excel·lent |
|---|---|---|
| 1. Per que TL funciona millor amb menys dades? | "Perque aprèn features de ImageNet" | Explica features jerarquiques, baix nivell vs alt nivell, necesitat de dades vs complexitat de la tasca |
| 2. Que fa BatchNormalization? | "Normalitza les activacions" | Explica covariat shift, acceleracio, efecte regularitzador, per que ajuda |
| 3. MaxPooling vs GlobalAveragePooling | "Redueix la mida" | Explica perdua espacial vs resum global, us tipic (mid-network vs final), parametres |
| 4. Per que LR menor al fine-tuning? | "Per no destruir el que ha apres" | Explica catastrophic forgetting, gradients petits per preservar features, concepte de plastic vs stable network |
| 5. Categories mes difícils | "Camisa i samarreta" (o les que obtingui) | Justifica amb exemples visuals, analisi de la matriu de confusio, caracteristiques visuals similars |
| 6. Dades minimes per a CNN des de zero | "Moltes dades" | Proposa xifres concretes (10K-100K per categoria per a tasques simples), cita benchmarks, compara amb TL |
| 7. Desplegament web | "Amb Flask o FastAPI" | Descriu serialitzacio, servei REST, preprocesament a la API, latencia, Docker, monitoring |
| 8. Biaixos en moderacio | "Podria no funcionar per a roba de tot el mon" | Identifica biaixos de dataset (roba occidental), discriminacio per cultura/religio, limitacions del Fashion MNIST |
Exemple de fitxers de lliurament correctes
deep_learning_joan_garcia.ipynb <- Notebook principal
model_final_joan_garcia.keras <- Model final (TL o CNN, el millor)
model_joan_garcia_best.keras <- Model CNN millor epoch (ModelCheckpoint)
model_tl_joan_garcia_final.keras <- Model Transfer Learning final
metadata_model_joan_garcia.json <- Metadata en JSON
informe_dl_joan_garcia.pdf <- Notebook exportat a PDF
exemples_classes_joan_garcia.png <- (opcional) grafics EDA
corbes_entrenament_joan_garcia.png <- (opcional) corbes d'entrenament
matriu_confusio_cnn_joan_garcia.png <- (opcional)
comparativa_final_joan_garcia.png <- (opcional)
Nom correcte dels fitxers
Tots els fitxers principals han d'incloure el cognom (o nom complet) de l'alumne. El fitxer .keras ha d'estar guardat en format natiu de Keras (no HDF5 .h5), que es el format recomanat per TensorFlow 2.12+.
Com generar el PDF de l'informe
Dins Jupyter Lab: File > Export Notebook As > PDF. Si el PDF directe falla (necessita LaTeX), alternativament: Export As > HTML i despres imprimeix-lo a PDF des del navegador.
Rubrica PR5072/02 | Modul 5072 Sistemes d'Aprenentatge Automatic | Institut Sa Palomera (Blanes) | Curs IABD 2026-2027