Skip to content

Commit

Permalink
Merge pull request #482 from mbeps/updates
Browse files Browse the repository at this point in the history
Added new university projects
  • Loading branch information
mbeps authored Feb 17, 2025
2 parents a20a022 + 0485244 commit 6e2545d
Show file tree
Hide file tree
Showing 10 changed files with 299 additions and 100 deletions.
9 changes: 5 additions & 4 deletions app/about/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,18 @@ import CertificateDatabaseKeys from "@/database/Certificates/CertificateDatabase
import companyDatabaseMap from "@/database/Companies/CompanyDatabaseMap";
import CourseDatabaseKeys from "@/database/Courses/CourseDatabaseKeys";
import courseDatabaseMap from "@/database/Courses/CourseDatabaseMap";
import CourseInterface from "@/database/Courses/CourseInterface";
import type CourseInterface from "@/database/Courses/CourseInterface";
import ProjectDatabaseKeys from "@/database/Projects/ProjectDatabaseKeys";
import RoleDatabaseKeys from "@/database/Roles/RoleDatabaseKeys";
import rolesDatabase from "@/database/Roles/RoleDatabaseMap";
import RoleInterface from "@/database/Roles/RoleInterface";
import type RoleInterface from "@/database/Roles/RoleInterface";
import type { Metadata } from "next";
import Image from "next/image";
import { notFound } from "next/navigation";

const aboutContent: string | undefined =
getMarkdownFromFileSystem(`public/about/long.md`)?.content;
const aboutContent: string | undefined = getMarkdownFromFileSystem(
"public/about/long.md"
)?.content;

export const metadata: Metadata = {
title: `${developerName} - About Me`,
Expand Down
8 changes: 4 additions & 4 deletions database/Modules/ModuleDatabaseKeys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ enum ModuleDatabaseKeys {
RHUL_SecurityManagement = "IY3501",

// King's College London
KCL_ArtificialIntelligenceReasoningAndDecisionMaking = "6CCS3AIN",
KCL_PatternRecognitionNeuralNetworksDeepLearning = "7CCSMPNN",
KCL_MachineLearning = "6CCS3ML1",
KCL_DataMining = "7CCSMDM1",
KCL_OptimizationMethods = "7CCSMOME",
KCL_ArtificialIntelligenceReasoningAndDecisionMaking = "6CCS3AIN",
KCL_AgentsAndMultiAgentSystems = "7CCSMAMS",
KCL_ComputerVision = "7CCSMCVI",
KCL_DataMining = "7CCSMDM1",
KCL_PhilosophyAndEthicsOfArtificialIntelligence = "7CCSMEAI",
KCL_OptimizationMethods = "7CCSMOME",
KCL_PatternRecognitionNeuralNetworksDeepLearning = "7CCSMPNN",
KCL_IndividualProject = "7CCSMPRJ",
}

Expand Down
4 changes: 4 additions & 0 deletions database/Modules/ModuleDatabaseMap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1050,6 +1050,7 @@ const modulesMap: Database<ModuleInterface> = {
"Implementing generative models like GANs to create synthetic data",
"Applying transfer learning to leverage pretrained models for new tasks",
],
relatedMaterials: [ProjectDatabaseKeys.HandWrittenDigitClassifier],
},
[ModuleDatabaseKeys.KCL_MachineLearning]: {
name: "Machine Learning",
Expand Down Expand Up @@ -1098,6 +1099,9 @@ const modulesMap: Database<ModuleInterface> = {
"Implementing learning from demonstration techniques",
"Addressing challenges in machine learning such as overfitting and bias",
],
relatedMaterials: [
ProjectDatabaseKeys.MachineLearningPacmanClassifierCoursework,
],
},
[ModuleDatabaseKeys.KCL_IndividualProject]: {
name: "Individual Project",
Expand Down
8 changes: 8 additions & 0 deletions database/Projects/ProjectDatabaseKeys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
* @see {@link projectMap} at `database/projects.ts`
*/
enum ProjectDatabaseKeys {
//^ Full Stack Projects
CircusDiscussions = "circus-discussions",
RingmasterMessaging = "ringmaster-messaging",
MagicianAI = "magician-ai",
Expand All @@ -15,6 +16,8 @@ enum ProjectDatabaseKeys {
Quizmify = "quizmify",
SideshowArticles = "sideshow-articles",
Noodle = "noodle",

//^ Backend Projects
SymphonyTranslateBot = "symphony-translate-bot",
SymphonyWebhookBot = "symphony-webhook-bot",
SymphonyCobaGPTBot = "symphony-coba-gpt-bot",
Expand All @@ -31,6 +34,10 @@ enum ProjectDatabaseKeys {
DjangoAuthentication = "django-authentication",
ClerkAuthentication = "clerk-authentication",
Auth0Authentication = "auth0-authentication",

//^ Artificial Intelligence Projects
MachineLearningPacmanClassifierCoursework = "machine-learning-pacman-classifier-coursework",
HandWrittenDigitClassifier = "hand-written-digit-classifier",
MachineLearningAlgorithms = "machine-learning-algorithms",
ArtificialIntelligenceReinforcementLearning = "artificial-intelligence-reinforcement-learning",
AdultIncomePrediction = "adult-income-prediction",
Expand All @@ -45,6 +52,7 @@ enum ProjectDatabaseKeys {
ComputerVisionImageSegmentation = "computer-vision-image-segmentation-assignment",
ComputerVisionQuizzes = "computer-vision-quizzes",
OsmosGame = "osmos-game",

SearchingAndSortingAlgorithms = "searching-and-sorting-algorithms",
AutomatedSetup = "automated-setup",
Leetcode = "leetcode",
Expand Down
76 changes: 72 additions & 4 deletions database/Projects/ProjectDatabaseMap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import skillDatabaseMap from "../Skills/SkillDatabaseMap";
import SkillCategoriesEnum from "@/enums/Skill/SkillCategoriesEnum";
import ModuleDatabaseKeys from "@/database/Modules/ModuleDatabaseKeys";
import CertificateDatabaseKeys from "../Certificates/CertificateDatabaseKeys";
import BlogDatabaseKeys from "../Blogs/BlogDatabaseKeys";
import RoleDatabaseKeys from "../Roles/RoleDatabaseKeys";
import ProjectTypeEnum from "@/enums/Project/ProjectTypeEnum";

Expand Down Expand Up @@ -372,7 +371,7 @@ const projectMap: Database<ProjectInterface> = {
type: ProjectTypeEnum.Academic,
},

//^ Symphony Bots
//^ Backend Web Development Projects
[ProjectDatabaseKeys.SymphonyTranslateBot]: {
name: `Symphony Translate Bot`,
description: `
Expand Down Expand Up @@ -750,8 +749,6 @@ const projectMap: Database<ProjectInterface> = {
archived: true,
type: ProjectTypeEnum.Professional,
},

//^ Backend Web Development Projects
[ProjectDatabaseKeys.FlaskForumBackend]: {
name: `Flask Forum Backend`,
description: `
Expand Down Expand Up @@ -923,6 +920,42 @@ const projectMap: Database<ProjectInterface> = {
},

//^ Artificial Intelligence Projects
[ProjectDatabaseKeys.HandWrittenDigitClassifier]: {
name: "Handwritten Digit Classifier",
description: `
A handwritten digit classifier using built using a Convolutional Neural Network (CNN).
Used various techniques such as data augmentation, batch normalisation, and dropout to improve the model's performance.
`,
repositoryURL:
"https://github.com/mbeps/pattern-recognition-neural-network-coursework-1",
category: ProjectCategoriesEnum.ArtificialIntelligence,
type: ProjectTypeEnum.Academic,
relatedMaterials: [
ModuleDatabaseKeys.KCL_PatternRecognitionNeuralNetworksDeepLearning,
],
skills: [
SkillDatabaseKeys.Python,
SkillDatabaseKeys.Keras,
SkillDatabaseKeys.TensorFlow,
SkillDatabaseKeys.Matplotlib,
SkillDatabaseKeys.Jupyter,
SkillDatabaseKeys.Git,
SkillDatabaseKeys.GitHub,
SkillDatabaseKeys.Poetry,
SkillDatabaseKeys.Black,

SkillDatabaseKeys.ProblemSolving,
SkillDatabaseKeys.ProjectManagement,
SkillDatabaseKeys.CriticalThinking,
SkillDatabaseKeys.Creativity,
SkillDatabaseKeys.Adaptability,
SkillDatabaseKeys.ObjectOrientedProgramming,
SkillDatabaseKeys.Algorithms,
],
thumbnailImage: addProjectThumbnail(
ProjectDatabaseKeys.HandWrittenDigitClassifier
),
},
[ProjectDatabaseKeys.AdultIncomePrediction]: {
name: "Adult Income Prediction",
description: `
Expand Down Expand Up @@ -993,6 +1026,41 @@ const projectMap: Database<ProjectInterface> = {
ProjectDatabaseKeys.HousePricePrediction
),
},
[ProjectDatabaseKeys.MachineLearningPacmanClassifierCoursework]: {
name: "Pacman Neural Network Classifier",
description: `
Built a neural network from scratch to detect Pacman's direction in the game.
Used various techniques such as batch normalisation, dropout, momentum, learning rate decay and more to improve the model's performance.
`,
repositoryURL:
"https://github.com/mbeps/machine-learning-pacman-classifier-coursework",
category: ProjectCategoriesEnum.ArtificialIntelligence,
type: ProjectTypeEnum.Academic,
relatedMaterials: [ModuleDatabaseKeys.KCL_MachineLearning],
skills: [
SkillDatabaseKeys.Python,
SkillDatabaseKeys.Git,
SkillDatabaseKeys.GitHub,
SkillDatabaseKeys.Poetry,
SkillDatabaseKeys.Black,

SkillDatabaseKeys.LinearAlgebra,
SkillDatabaseKeys.Probability,
SkillDatabaseKeys.Statistics,
SkillDatabaseKeys.Calculus,

SkillDatabaseKeys.ProblemSolving,
SkillDatabaseKeys.ProjectManagement,
SkillDatabaseKeys.CriticalThinking,
SkillDatabaseKeys.Creativity,
SkillDatabaseKeys.Adaptability,
SkillDatabaseKeys.ObjectOrientedProgramming,
SkillDatabaseKeys.Algorithms,
],
thumbnailImage: addProjectThumbnail(
ProjectDatabaseKeys.MachineLearningPacmanClassifierCoursework
),
},
[ProjectDatabaseKeys.MachineLearningAlgorithms]: {
name: "Machine Learning Algorithms",
description: `
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
66 changes: 66 additions & 0 deletions public/projects/hand-written-digit-classifier/features.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
## Network Architecture
The network follows a progressive deepening structure, with each block increasing in complexity to learn more sophisticated features.

### Block 1
- Two Conv2D layers (32 filters, 3×3 kernel) - Captures basic edges and shapes
- BatchNormalisation after each Conv2D - Stabilises training
- MaxPooling (2×2) - Reduces spatial dimensions and computational load
- SpatialDropout2D (20%) - Prevents feature map co-adaptation

### Block 2
- Two Conv2D layers (96 filters, 3×3 kernel) - Learns intermediate-level patterns
- BatchNormalisation after each Conv2D - Maintains consistent feature scaling
- MaxPooling (2×2) - Further dimension reduction
- SpatialDropout2D (20%) - Continues regularisation

### Block 3
- Two Conv2D layers (128 filters, 3×3 kernel, 'same' padding) - Identifies complex digit features
- BatchNormalisation after each Conv2D - Normalises deeper features
- MaxPooling (2×2) - Final spatial reduction
- SpatialDropout2D (20%) - Ensures robust feature learning

### Dense Layers
- Flatten layer - Converts 2D features to 1D
- Dense layer (1050 units) with L2 regularisation - Rich feature combination
- BatchNormalisation - Stabilises deep network training
- Dropout (50%) - Prevents overfitting
- Output layer (10 units, softmax) - Produces digit probabilities

## Data Augmentation

### Static Augmentation (Albumentations)
- ElasticTransform - Simulates natural handwriting deformations
- GaussNoise - Adds resilience to image noise
- CoarseDropout - Improves robustness to missing parts
- RandomBrightnessContrast - Handles varying image qualities
- Image Inversion - Adapts to different digit colours

### Real-time Augmentation (ImageDataGenerator)
- Rotation - Handles tilted handwriting
- Width/Height shifts - Accounts for different digit positions
- Zoom range - Manages varying digit sizes

## Training Strategy

### Optimisation
- Adam optimiser with gradient clipping - Prevents explosive gradients
- Initial learning rate: 1e-3 - Balanced between speed and stability
- Batch size: 384 - Provides stable gradient estimates

### Training Callbacks
- Early Stopping - Prevents overfitting by monitoring validation loss
- Model Checkpoint - Preserves best model during training
- ReduceLROnPlateau - Adapts learning rate when progress plateaus

### Regularisation Techniques
- BatchNormalisation - Stabilises training throughout the network
- SpatialDropout2D - Specifically designed for convolutional features
- Standard Dropout - Prevents dense layer overfitting
- L2 regularisation - Controls weight growth

## Dataset Management
- Multiple dataset combination - Increases training diversity
- Image standardisation (28×28) - Ensures consistent input size
- Value normalisation [0,1] - Stabilises network training
- 90-10 split - Provides sufficient validation data
- Fixed random seed - Ensures reproducible results
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
## Core Classification Architecture
- Feed-forward neural network with configurable hidden layers
- ReLU activation functions for hidden layers
- Softmax output layer for 4-class movement prediction
- He initialisation for weights

## Optimisation Techniques
- Mini-batch gradient descent
- Momentum-based updates with velocity tracking
- Inverse scaling learning rate decay
- L2 regularisation
- Gradient clipping with norm thresholding

## Regularisation Methods
- Batch Normalisation
- Running mean/variance tracking
- Learnable scale (gamma) and shift (beta) parameters
- Training/inference mode handling
- Dropout
- Inverted dropout scaling
- Configurable dropout rate

## Training Management
- Early stopping with validation monitoring
- Automatic hyperparameter optimisation via grid search
- Train/validation/test split (80/10/10)
- Best model checkpointing

## Implementation Features
- Type hints throughout codebase
- Numerical stability safeguards
- Comprehensive error handling
- Memory efficient operations
- Legal move validation and filtering
- Fallback strategies for edge cases
Loading

0 comments on commit 6e2545d

Please sign in to comment.