Batch self-organizing map weight learning function
[dW,LS] = learnsomb(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
info = learnsomb('code')
learnsomb is the batch self-organizing map weight learning function.
[dW,LS] = learnsomb(W,P,Z,N,A,T,E,gW,gA,D,LP,LS) takes several inputs:
S-by-R weight matrix (or S-by-1 bias vector)
R-by-Q input vectors (or ones(1,Q))
S-by-Q weighted input vectors
S-by-Q net input vectors
S-by-Q output vectors
S-by-Q layer target vectors
S-by-Q layer error vectors
S-by-R gradient with respect to performance
S-by-Q output gradient with respect to performance
S-by-S neuron distances
Learning parameters, none, LP = 
Learning state, initially should be = 
and returns the following:
S-by-R weight (or bias) change matrix
New learning state
Learning occurs according to learnsomb's learning parameter, shown here with its default value:
Initial neighborhood size
Ordering phase steps
info = learnsomb('code') returns useful information for each code string:
Returns names of learning parameters.
Returns default learning parameters.
Returns 1 if this function uses gW or gA.
This example defines a random input P, output A, and weight matrix W for a layer with a 2-element input and 6 neurons. This example also calculates the positions and distances for the neurons, which appear in a 2-by-3 hexagonal pattern.
p = rand(2,1); a = rand(6,1); w = rand(6,2); pos = hextop(2,3); d = linkdist(pos); lp = learnsomb('pdefaults');
Because learnsom only needs these values to calculate a weight change (see Algorithm).
ls = ; [dW,ls] = learnsomb(w,p,,,a,,,,,d,lp,ls)
You can create a standard network that uses learnsomb with selforgmap. To prepare the weights of layer i of a custom network to learn with learnsomb:
To train the network (or enable it to adapt):
learnsomb calculates the weight changes so that each neuron's new weight vector is the weighted average of the input vectors that the neuron and neurons in its neighborhood responded to with an output of 1.
The ordering phase lasts as many steps as LP.steps.
During this phase, the neighborhood is gradually reduced from a maximum size of LP.init_neighborhood down to 1, where it remains from then on.