Salta el contingut

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 run amb --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=2g o 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