From 043872a33a6e596a726dad5f5ebfbbd0826f96ee Mon Sep 17 00:00:00 2001 From: Arthur DANJOU Date: Tue, 9 Dec 2025 21:18:47 +0100 Subject: [PATCH] =?UTF-8?q?Ajouter=20la=20documentation=20pour=20le=20proj?= =?UTF-8?q?et=20"Dropout=20Reduces=20Underfitting"=20avec=20une=20impl?= =?UTF-8?q?=C3=A9mentation=20TensorFlow/Keras=20et=20des=20objectifs=20sci?= =?UTF-8?q?entifiques?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/projects/artmcp.md | 220 ++++++++++++++++++ .../projects/dropout-reduces-underfitting.md | 154 ++++++++++++ 2 files changed, 374 insertions(+) create mode 100644 content/projects/artmcp.md create mode 100644 content/projects/dropout-reduces-underfitting.md diff --git a/content/projects/artmcp.md b/content/projects/artmcp.md new file mode 100644 index 0000000..83763a3 --- /dev/null +++ b/content/projects/artmcp.md @@ -0,0 +1,220 @@ +--- +slug: artmcp +title: πŸ€– ArtMcp +description: A comprehensive Model Context Protocol (MCP) server exposing professional profile information about Arthur Danjou. +publishedAt: 2025/10/27 +readingTime: 3 +favorite: true +tags: + - web + - nuxt + - mcp +--- + +πŸ€– [ArtMcp](https://github.com/arthurdanjou/artmcp) - Arthur Danjou's MCP Server + +A comprehensive [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server exposing professional profile information about Arthur Danjou. Built with [Nuxt](https://nuxt.com) and deployed on [NuxtHub](https://hub.nuxt.com) at the Edge. + +πŸ”— **Live Server**: https://mcp.arthurdanjou.fr + +## 🎯 Features + +### MCP Resources + +The server exposes the following resources through the Model Context Protocol: + +- **πŸ“Š Skills** (`resource://artmcp/skills`) - Complete list of technical skills (programming languages, frameworks, tools) +- **πŸ’Ό Experiences** (`resource://artmcp/experiences`) - Professional work experience and projects +- **πŸš€ Projects** (`resource://artmcp/projects`) - Portfolio of personal and professional projects +- **πŸŽ“ Education** (`resource://artmcp/education`) - Academic background and degrees +- **🌐 Languages** (`resource://artmcp/languages`) - Spoken languages with proficiency levels +- **πŸ‘€ Profile** (`resource://artmcp/profile`) - Comprehensive profile with bio, location, availability, career goals, and work preferences +- **🎨 Hobbies** (`resource://artmcp/hobbies`) - Personal interests and activities +- **πŸ“ž Contact** (`resource://artmcp/contact`) - Professional contact information and social links +- **πŸ› οΈ Uses** (`resource://artmcp/uses`) - Tools, hardware, and software setup + +### MCP Tools + +- **`activity`** - Real-time current activity and status of Arthur Danjou +- **`resume-link`** - Get download link for resume in English or French +- **`stats`** - Detailed coding statistics and analytics from WakaTime +- **`status-page`** - Real-time status and uptime monitoring for homelab infrastructure +- **`uses-by-category`** - Filter uses by category (homelab, ide, hardware, software) +- **`weather`** - Get current weather for a city + +### MCP Prompts + +Pre-configured prompts for common queries about: +- Resume generation +- Skills and expertise +- Projects showcase +- Real-time activity +- Contact information +- And more... + +## πŸ—οΈ Architecture + +This project uses: +- **Nuxt 4** with Nitro for server-side rendering +- **@nuxt/content** for content management +- **@nuxtjs/mcp-toolkit** for MCP server implementation +- **NuxtHub** for edge deployment on Cloudflare Workers +- **nuxt-studio** for content management studio +- **Zod** for schema validation + +## πŸš€ Getting Started + +### Prerequisites + +- Node.js 18+ or Bun +- pnpm 10.12.1+ + +### Installation + +```bash +# Install dependencies +pnpm install +``` + +### Environment Variables + +Create a `.env` file (optional): + +```bash +# Discord integration (optional) +NUXT_DISCORD_USER_ID="" +NUXT_DISCORD_ID="" +NUXT_DISCORD_TOKEN="" + +# Wakatime integration (optional) +NUXT_WAKATIME_USER_ID="" +NUXT_WAKATIME_CODING="" +NUXT_WAKATIME_EDITORS="" +NUXT_WAKATIME_LANGUAGES="" +NUXT_WAKATIME_OS="" + +# Status page (optional) +NUXT_STATUS_PAGE="" +``` + +### Development + +Start the development server on `http://localhost:3000`: + +```bash +pnpm dev +``` + +### Production + +Build the application for production: + +```bash +pnpm build +``` + +### Deployment + +Deploy to NuxtHub/Cloudflare: + +```bash +pnpm deploy +``` + +## πŸ“š API Endpoints + +All resources are also available as REST API endpoints: + +- `GET /api/skills` +- `GET /api/experiences` +- `GET /api/projects` +- `GET /api/education` +- `GET /api/languages` +- `GET /api/profile` +- `GET /api/hobbies` +- `GET /api/contact` +- `GET /api/uses` +- `GET /api/activity` +- `GET /api/wakatime` +- `GET /api/status-page` +- `GET /api/resumes/{en|fr}` - Download resume + +## πŸ§ͺ Development + +### Linting + +```bash +pnpm lint +``` + +### Type Checking + +```bash +npx tsc --noEmit --skipLibCheck +``` + +## πŸ“‚ Content Structure + +Content is managed in the `content/` directory: + +``` +content/ +β”œβ”€β”€ skills.json # Technical skills +β”œβ”€β”€ languages.json # Spoken languages +β”œβ”€β”€ profile.md # Comprehensive profile info +β”œβ”€β”€ contact.json # Contact information +β”œβ”€β”€ hobbies.md # Personal interests +β”œβ”€β”€ documentation.md # MCP documentation +β”œβ”€β”€ experiences/*.md # Work experiences +β”œβ”€β”€ projects/*.md # Project portfolio +β”œβ”€β”€ education/*.md # Academic background +└── uses/*.md # Tools and setup +``` + +## πŸ”§ Technologies + +- **Frontend/Backend**: Nuxt 4, Vue 3, Nitro +- **MCP**: @nuxtjs/mcp-toolkit +- **Content**: Nuxt Content with better-sqlite3 +- **Content Studio**: nuxt-studio +- **Deployment**: Cloudflare Workers via NuxtHub +- **Validation**: Zod schemas + +## πŸ“– MCP Integration + +To use this server with an MCP client: + +1. Configure your MCP client to connect to `https://mcp.arthurdanjou.fr/mcp` +2. Or use the API directly via REST endpoints + +Example MCP client configuration: +```json +{ + "mcpServers": { + "artmcp": { + "url": "https://mcp.arthurdanjou.fr/mcp" + } + } +} +``` + +## 🀝 Contributing + +This is a personal portfolio project. Feel free to use it as inspiration for your own MCP server! + +## πŸ“ License + +Private project - All rights reserved + +## πŸ‘€ About + +**Arthur Danjou** +- Data Science & Applied AI student at Paris Dauphine-PSL University, passionate about machine learning and mathematical modelling +- πŸ“ Paris, France +- πŸ”— [LinkedIn](https://go.arthurdanjou.fr/linkedin) +- πŸ™ [GitHub](https://go.arthurdanjou.fr/github) +- πŸ“§ [Email](https://go.arthurdanjou.fr/mail-pro) + +--- + +Built with ❀️ using Nuxt and the Model Context Protocol diff --git a/content/projects/dropout-reduces-underfitting.md b/content/projects/dropout-reduces-underfitting.md new file mode 100644 index 0000000..02b2128 --- /dev/null +++ b/content/projects/dropout-reduces-underfitting.md @@ -0,0 +1,154 @@ +--- +slug: dropout-reduces-underfitting +title: πŸ”¬ Dropout reduces underfitting +description: TensorFlow/Keras implementation of "Dropout Reduces Underfitting" (Liu et al., 2023). A comparative study of Early and Late Dropout strategies to optimize model convergence. +publishedAt: 2054/12/10 +readingTime: 4 +favorite: false +tags: + - python + - reserch + - machine-learning + - tensorflow +--- + +πŸ“‰ [Dropout Reduces Underfitting](https://github.com/arthurdanjou/dropoutreducesunderfitting): Reproduction & Analysis + +![TensorFlow](https://img.shields.io/badge/TensorFlow-2.x-orange.svg) +![Python](https://img.shields.io/badge/Python-3.8%2B-blue.svg) +![License](https://img.shields.io/badge/License-MIT-green.svg) + +> **Study and reproduction of the paper:** Liu, Z., et al. (2023). *Dropout Reduces Underfitting*. arXiv:2303.01500. + +The paper is available at: [https://arxiv.org/abs/2303.01500](https://arxiv.org/abs/2303.01500) + +This repository contains a robust and modular implementation in **TensorFlow/Keras** of **Early Dropout** and **Late Dropout** strategies. The goal is to verify the hypothesis that dropout, traditionally used to reduce overfitting, can also combat underfitting when applied solely during the initial training phase. + +## 🎯 Scientific Objectives + +The study aims to validate the three operating regimes of Dropout described in the paper: + +1. **Early Dropout** (Targeting Underfitting): Active only during the initial phase to reduce gradient variance and align their direction, allowing for better final optimization. +2. **Late Dropout** (Targeting Overfitting): Disabled at the start to allow rapid learning, then activated to regularize final convergence. +3. **Standard Dropout**: Constant rate throughout training (Baseline). +4. **No Dropout**: Control experiment without dropout. + +## πŸ› οΈ Technical Architecture + +Unlike naive Keras callback implementations, this project uses a **dynamic approach via the TensorFlow graph** to ensure the dropout rate is properly updated on the GPU without model recompilation. + +### Key Components + +* **`DynamicDropout`**: A custom layer inheriting from `keras.layers.Layer` that reads its rate from a shared `tf.Variable`. +* **`DropoutScheduler`**: A Keras `Callback` that drives the rate variable based on the current epoch and the chosen strategy (`early`, `late`, `standard`). +* **`ExperimentPipeline`**: An orchestrator class that handles data loading (MNIST, CIFAR-10, Fashion MNIST), model creation (Dense or CNN), and execution of comparative benchmarks. + +## File Structure + +``` +. +β”œβ”€β”€ README.md # This documentation file +β”œβ”€β”€ Dropout reduces underfitting.pdf # Original research paper +β”œβ”€β”€ pipeline.py # Main experiment pipeline +β”œβ”€β”€ pipeline.ipynb # Jupyter notebook for experiments +β”œβ”€β”€ pipeline_mnist.ipynb # Jupyter notebook for MNIST experiments +β”œβ”€β”€ pipeline_cifar10.ipynb # Jupyter notebook for CIFAR-10 experiments +β”œβ”€β”€ pipeline_cifar100.ipynb # Jupyter notebook for CIFAR-100 experiments +β”œβ”€β”€ pipeline_fashion_mnist.ipynb # Jupyter notebook for Fashion MNIST experiments +β”œβ”€β”€ requirements.txt # Python dependencies +β”œβ”€β”€ .python-version # Python version specification +└── uv.lock # Dependency lock file +``` + +## πŸš€ Installation + +```bash +# Clone the repository +git clone https://github.com/arthurdanjou/dropoutreducesunderfitting.git +cd dropoutreducesunderfitting +``` + +## Install dependencies +```bash +pip install tensorflow numpy matplotlib seaborn scikit-learn +``` + +## πŸ“Š Usage + +The main notebook pipeline.ipynb contains all necessary code. Here is how to run a typical experiment via the pipeline API. +1. Initialization + +Choose your dataset (cifar10, fashion_mnist, mnist) and architecture (cnn, dense). +```python +from pipeline import ExperimentPipeline + +# Fashion MNIST is recommended to observe underfitting/overfitting nuances +exp = ExperimentPipeline(dataset_name="fashion_mnist", model_type="cnn") +``` + +2. Learning Curves Comparison + +Compare training dynamics (Loss & Accuracy) of the three strategies. + +```python +exp.compare_learning_curves( + modes=["standard", "early", "late"], + switch_epoch=10, # The epoch where dropout state changes + rate=0.4, # Dropout rate + epochs=30 +) +``` + +3. Ablation Studies + +Study the impact of the "Early" phase duration or Dropout intensity. + +```python +# Impact of the switch epoch on final performance +exp.compare_switch_epochs( + switch_epochs=[5, 10, 15, 20], + modes=["early"], + rate=0.4, + epochs=30 +) + +# Impact of the dropout rate +exp.compare_drop_rates( + rates=[0.2, 0.4, 0.6], + modes=["standard", "early"], + switch_epoch=10, + epochs=25 +) +``` + +4. Data Regimes (Data Scarcity) + +Verify the paper's hypothesis that Early Dropout shines on large datasets (or limited models) while Standard Dropout protects small datasets. + +```python +# Training on 10%, 50% and 100% of the dataset +exp.run_dataset_size_comparison( + fractions=[0.1, 0.5, 1.0], + modes=["standard", "early"], + rate=0.3, + switch_epoch=10 +) +``` + +## πŸ“ˆ Expected Results + +According to the paper, you should observe: + +- Early Dropout: Higher initial Loss, followed by a sharp drop after the switch_epoch, often reaching a lower minimum than Standard Dropout (reduction of underfitting). +- Late Dropout: Rapid rise in accuracy at the start (potential overfitting), then stabilized by the activation of dropout. + +## πŸ“ Authors + +- [Arthur Danjou](https://github.com/ArthurDanjou) +- [Alexis Mathieu](https://github.com/Alex6535) +- [Axelle Meric](https://github.com/AxelleMeric) +- [Philippine Quellec](https://github.com/Philippine35890) +- [Moritz Von Siemens](https://github.com/MoritzSiem) +M.Sc. Statistical and Financial Engineering (ISF) - Data Science Track at UniversitΓ© Paris-Dauphine PSL + +Based on the work of Liu, Z., et al. (2023). Dropout Reduces Underfitting.