Apprentissage et intelligence artificielle
EE-311
Mode opératoire des labos et travaux à rendre
Page content
Ce post a pour but de rappeller formellement les informations concernant l'organisation des séances pratiques ainsi que des travaux à rendre. Cette organization est présentée lors du premier labo.
Introduction
Les labos jouent un rôle essentiel pour l'apprentissage, pour illustrer et pour mettre en pratique les concepts discutés au cours.
Organisation des séances de labo et attentes
La partie labo comprend deux volets:
- une séance interactive en classe avec des problèmes présentés progressivement par un·e assistant·e, avec une alternance d'intervalles durant lesquels vous résolvez les problèmes puis où l'assistant·e présente la résolution. Ces séances, qui sont participatives, ne sont pas enregistrées. Il est donc important de faire tout votre possible pour les suivre pour faciliter le point 2. À noter que si vous deviez manquer la séance, une version résolue du problème est fournie à la fin de la séance.
- un programme à écrire que vous soumettrez individuellement. À la différence de la séance interactive, vous modifierez en général directement une librairie de fonctions (c'est à dire, un fichier Python avec extension .py) dont vous pourrez vérifier le comportement (au moyen d'appels et de tests qui vous sont fournis). Une fois votre code écrit et vérifié, vous le soumettrez par Moodle.
Durant les séances de labo des solutions seront aussi fournies au fur et à mesure dans un post sur la plateforme Ed du cours.
Marche à suivre détaillée pour les labos
À faire lors de la première session en classe (nécessaire de le faire qu'une seule fois):
- Se loguer sur https://noto.epfl.ch/
- Cloner le repo des labos en sélectionnant le menu: git -> Clone a repository puis en indiquant l'adresse:
À faire lors de chaque nouvelle séance, et pour mettre à jour les fichiers (lors de la mise en ligne de la solution par exemple):
- git pull (voir vidéo)
Contenu du dossier
Le répertoire ee311-labs-stud2025 contient un dossier numéroté par semaine (par exemple: lab01). Chaque dossier contient les fichiers suivants:
- *.npz, *.npy: jeux de données utilisées en séance ou pour le travail à rendre.
- lab.ipynb: ce fichier sert de point de départ et forme la base de la séance de labo supervisée; il contient du code à compléter pour obtenir les résultats attendus en séance ainsi que des explications écrites.
- lab_solved.ipynb: le même fichier mais avec solutions et explications plus détaillées (mis en ligne en fin de session).
- homework.ipynb: ce fichier contient des instructions et précisions pour le homework (travail à effectuer en exercice), il contient le code nécessaire à faire tourner les tests et valider la soumission avant de la poster sur Moodle.
- homework.py: fichier contenant les fonctions à compléter pour que les tests réussissent, et à soumettre sur Moodle avant la séance suivante (ce code doit être complet dans le sens où aucun autre fichier de code ne peut être soumis). Ce fichier contient les détails du travail à effectuer sous forme de commentaires aux fonctions à compléter.
- testing:py: fichier fourni par les assistants contenant les tests validant le homework. Il ne doit pas être modifié et peut être appelé depuis le notebook homework.ipynb.
Séances de labo
Pendant la séance de labo, les assistant·e·s guident les étudiant·e·s à travers le notebook lab.ipynb. Après la séance, le fichier lab_solved.ipynb peut être consulté pour voir la solution.
Travaux à rendre
Un problème similaire à celui présenté en labo est posé dans le fichier homework.py, potentiellement complémenté par les informations données dans homework.ipynb. Le fichier est à compléter selon les instructions puis à soumettre sur Moodle. La dernière cellule de homework.ipynb permet faire tourner les tests pour vérifier l'implémentation de homework.py (les tests fournis permettent de détecter la plupart des erreurs, mais ne garantissent pas que la réponse est entièrement valide).
Une fois soumis sur Moodle, le fichier homework.py est évalué par les assistant·e·s via une procédure similaire à celle du fichier testing.py.
Résumé et terminologie détaillée
Les labos consisteront pour vous à compléter des programmes dans le language Python (version 3) en mettant à profit les librairies de fonctions numpy et scikit-learn (écrites en Python 3) qui étendent le language Python de base afin de faciliter les opérations numériques et, en particulier les applications liées à l'apprentissage machine.
Vous écrirez votre code à l'intérieur de notebooks Jupyter. Ces fichiers (avec une extension .ipynb) contiennent différents types de cellules, en particulier, des cellules de commentaires (avec des explications, des questions, ou des instructions sur comment vous devez procéder) et des cellules de code Python, qui sont exécutables. Finalement, vous serez aussi amen·é·es à écrire votre code dans des librairies de fonctions Python (fichiers avec extension .py) qui pourront être appelées dans les notebooks.
Pour exécuter les programmes ainsi que pour stocker vos fichiers, nous tirerons partie d'une plateforme de type JupyterHub, qui est maintenue par l'EPFL à l'adresse noto.epfl.ch. Nous appelerons cette plateforme "plateforme noto" ou simplement "noto". Cette plateforme vous fournit un espace de travail complet pour éditer des fichiers texte et exécuter des programme. Cet espace de travail est accessible au travers d'un simple browser web (firefox, chrome, Safari, etc.) et vos droit d'accès d'étudiant·e EPFL.
Finalement, vous serez amené·e·s (au travers d'une fonctionalité de la plateforme noto) à télécharger les énoncés par des appels à un logiciel de contrôle de versions (git) qui vous permettra d'obtenir une copie (clone) du dossier contenant tous les fichiers de l'énoncé initial, puis d'en faire des mises à jour au fur et à mesure du semestre (par exemple pour obtenir la solution du problème traité en classe ou l'énoncé de la séance en cours) au moyen de d'appels pull.
Ce mode opératoire peut sembler compliqué au premier abord et contient beaucoup d'éléments qui ne font pas partie à proprement parler de la matière du cours. Cependant, il est à noter que plusieurs de ces éléments sont des piliers du développement robuste de logiciel (en particulier, l'utilisation d'un système de contrôle de version, l'organisation du code en libraires de fonctions, l'utilisation de procédures de test unitaires). Ce cours n'a pas la prétention d'enseigner (ou de de tester vos connaissances sur) ces sujets mais il vous permettra néanmoins de vous familiariser avec eux, ce qui vous sera très utile pour des projets futurs!