This project provides an implementation of Self-Organizing Map (SOM) in Go. It implements the two most well known SOM training algorithms: sequential and batch. The batch training is faster than the sequential as it can be parallelized, taking advantage of as many cores as your machine provides. However it can be less accurate as it merely provides a resonable approximation of SOM, but still acceptable. The sequential algorithm is performed as its name implies, sequentially. Because of its sequential nature it's slower than batch training, but more accurate. You can read more about SOM training algorithms here. The goal of this project is to provide an API to build SOMs in Go. The project also implements various SOM quality measures which can help you validate the results of the training algorithm. In particular the project implements quantization and topographic error to measure both the projection and topography as well as topographic product which can help you make a decision about the size of the SOM grid.