I'm trying to write my own SOM in python, and after reading material from several sources (and watching video tutorials) I think I understand all the steps.

There is however one issue that I want to make sure I understand correctly - once I decide on a grid (let's say a rectangular N*M grid with a distance between grid points of d) - is this grid static, for the sake of calculating the neighbors of each neuron/node? is d always the same?

As the neighbors radius shrinks (every iteration or epoch) do I still go back to the same 2D map with the exact same N*M positioning and d distances between them?

Edit for clarification - when I say static I mean static in the 2D space of the grid itself.


Conventional SOMs have a static topology during the training process which means that the grid distances between any pair of neurons can be calculated at the initialization step. You can suppose to have a graph with defined connectivity matrix or node/edge list.

The neighborhood radius is a parameter which control the extent of cooperation between adjacent neurons during the weight correction. This radius dynamically decreases incrementally but The structure/topology of the map should be defined in the initialization phase and does not changed till the end of training.

There are several variants of SOMs like Growing SOM (GSOM), Growing Grid (GG), Directed Batch GSOM (DBGSOM) and etc which have a dynamic structure and the map changed during the learning phase.

| cite | improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.