Nguyen-Widrow layer initialization function
net = initnw(net,i)
initnw is a layer initialization function
that initializes a layer's weights and biases according to
the Nguyen-Widrow initialization algorithm. This algorithm chooses
values in order to distribute the active region of each neuron in
the layer approximately evenly across the layer's input space.
The values contain a degree of randomness, so they are not the same
each time this function is called.
initnw requires that the layer it initializes
have a transfer function with a finite active input range. This includes
transfer functions such as
purelin, whose active input range is the
[-inf, inf]. Transfer functions,
tansig, will return their active input
range as follows:
activeInputRange = tansig('active') activeInputRange = -2 2
net = initnw(net,i) takes two arguments,
Index of a layer
and returns the network with layer
weights and biases updated.
There is a random element to Nguyen-Widrow initialization. Unless
the default random generator is set to the same seed before each call
initnw, it will generate different weight and
bias values each time.
You can create a standard network that uses
To prepare a custom network to be initialized with
net.initParam to the empty matrix
initlay has no initialization parameters.
To initialize the network, call
The Nguyen-Widrow method generates initial weight and bias values for a layer so that the active regions of the layer's neurons are distributed approximately evenly over the input space.
Advantages over purely random weights and biases are
Few neurons are wasted (because all the neurons are in the input space).
Training works faster (because each area of the input space has neurons). The Nguyen-Widrow method can only be applied to layers
With a bias
With weights whose
netInputFcn set to
transferFcn whose active region
If these conditions are not met, then
initialize the layer's weights and biases.