Projects
As I am interested in computer vision and deep learning, much of my time is spent on creating side projects or re-implementing papers. Below you will find my recent projects that I did during my free time outside classes or on vacations which I am very proud of. 😆
BristolLink
An anonymous match-making platform for University of Bristol student during Valentine’s Day 2025.
How does
work?
1. Enter their Email
Find their UoB email through Outlook and submit it through Bristol Link. They’ll receive an anonymous notification that someone is interested.
2. Wait for their Response
If they’re interested, they’ll log into Bristol Link and enter an email address of their own choice.
3. Check for a Match
If the emails match, you both receive confirmation and can start your story. If not, you’ll be notified and can try with someone new.
EcoSim
Best ML Project - BrisHack 2025
EcoSim is a Java-based simulation developed during BrisHack 2025. It models the interactions between various animal species and their environment, utilizing procedural terrain generation and intelligent agent behavior.
Contributors
Features
- Procedural Terrain Generation: Uses Perlin noise to create realistic and dynamic terrain landscapes.
- Animal AI with Monte Carlo Tree Search (MCTS): Animals use MCTS-based decision-making to move intelligently, avoiding predators, seeking food, and reproducing.
- Predator-Prey Dynamics: Implements a food chain where animals interact based on hierarchical levels, engaging in hunting, fleeing, and breeding behaviors.
- Environmental Factors: Includes terrain types that influence movement and survival.
- Graphical Interface: Built using JavaFX, allowing users to visualize the ecosystem in real time.
- Event Logging and Statistics: Displays ecosystem events and population statistics in real-time.
Running the app
Install Java Runtime Environment (JRE)
You can download Java from the official Oracle website.
Install the EcoSim JAR file
Download the pre-built JAR file from the releases section
Navigate to the directory with the JAR File
Then run
java -jar ecosim-1.0.0.jar
Claude-haskell
claude-haskell is an unofficial binding for Anthropic’s Claude API. This project has not been reviewed or published as an official package.
This library provides Haskell functions to interact with the Claude API, including sending text messages, images, pdf documents, listing and retrieving model information, and create message batches. It includes utilities and types for building API requests and handling responses.
🍬Candycombs

Bristol CSS 24-Hour GameJam 2024
A 2D Halloween-themed game featuring various mini-games. Players collect candies by exploring rooms, answering trivia questions, trying their luck at the roulette table, and opening chests to gain power-ups.
Contributors
Archie Kind 🎃 | Harish Rajkumar 👻 | Hrushikesh Emkay 🧛 | Jack Dempsey 🦇 | Josh Jenkins 🕸️ | Shubham Kulkarni 🧙 | Tom Lam 🎃 |
Installation
Clone the Repository
git clone https://github.com/BRSY1/candycombs.git
cd candycombs
Install dependencies
pip install -r requirements.txt
Launch the game
python3 test.py
Land Cover Segmentation with UNets
Semantic segmentation of the Multi-Source Satellite Imagery for Segmentation Dataset with UNet and ResUNet-a (a variant of ResUNet) in PyTorch.


I incorporated the trained models into a graphical interface using Streamlit. It allows users to randomly generate a image segmentation mask from the test dataset and upload images to the models.
Unfortunitely, the models are not able to generalize well to real-world images due to the limited number of data samples in the dataset.
LeNet-5 From Scratch
During the summer vacation after my foundation year, I took an online course on machine learning which really sparked my interest in deep neural networks. 🤩 Having no internships and nothing else to do, I decided to spend my summer building a handwritten digit recognition app, marking the start of my journey in deep learning. 🥳


Installation
Clone the Repository
git clone https://github.com/T0mLam/LeNet-5-from-scratch.git
cd LeNet-5-from-scratch
Install dependencies
pip install -r requirements.txt
Usage
Launch the app
python -m app
Import and use the modules
Create a new file experiment.py
in the root directory
# Use the format 'from modules.{filename} import {module}'
# e.g. import the Adam optimizer
from modules.optimizer import Adam
...
optimizer = Adam(model, lr=0.001)
Run the script
python -m experiment