This repository contains three practical projects focused on different types of neural networks and their applications. Each project includes implementation, experimentation, and analysis, accompanied by a detailed report.
Most models where programmed from scratch only using numpy, and for some others the pytorch library was used.
This project implements, trains, and analyzes various Hopfield networks (Hopfield '82) under different scenarios such as:
- Correct memory recovery
- Spurious states
- Increasing the number of inputs and their correlation
The goal is to study the network’s behavior in each case and draw conclusions about its usefulness and capacity.
This project explores various neural network approaches applied to classic classification and regression problems:
- Simple perceptrons are implemented to learn logical functions AND and OR with different numbers of inputs, analyzing error evolution and visualizing decision boundaries
- The capacity of the single-layer perceptron is studied with respect to the number of training patterns
- Multi-layer perceptrons are trained using the backpropagation algorithm to learn the XOR operation and a continuous function, evaluating the impact of mini-batch size
Additionally:
- A Restricted Boltzmann Machine and a Convolutional Neural Network are trained on the MNIST dataset, aiming to identify minimal configurations that reach a predefined accuracy
- An autoencoder is trained to obtain low-dimensional representations, which are later used to improve a classifier’s performance
- The XOR function is also solved using multi-layer perceptrons trained with simulated annealing and genetic algorithms, analyzing error evolution, fitness, and the impact of various hyperparameters
This project investigates several applications of Kohonen networks:
- A 2D SOM that learns a uniform distribution within a unit circle and other geometric shapes, evaluating topology preservation
- Application to the Traveling Salesman Problem with over 200 cities, achieving efficient approximations using ring-shaped node layouts
- Dimensionality reduction and clustering analysis on high-dimensional data, visualizing U-matrices and complementing the study with trend analysis and K-means to estimate the optimal number of clusters
Feel free to explore each directory for code, experiments, and results.