Create, Configure, and Initialize Multilayer Shallow Neural Networks
This topic presents part of a typical multilayer shallow network workflow. For more information and other steps, see Multilayer Shallow Neural Networks and Backpropagation Training.
After the data has been collected, the next step in training a network is to create the
network object. The function feedforwardnet
creates a multilayer
feedforward network. If this function is invoked with no input arguments, then a default
network object is created that has not been configured. The resulting network can then be
configured with the configure
command.
As an example, the file bodyfat_dataset.mat
contains a predefined set
of input and target vectors. The input vectors define data regarding physical attributes of
people and the target values define percentage body fat of the people. Load the data using
the following command:
load bodyfat_dataset
Loading this file creates two variables. The input matrix
bodyfatInputs
consists of 252 column vectors of 13 physical attribute
variables for 252 different people. The target matrix bodyfatTargets
consists of the corresponding 252 body fat percentages.
The next step is to create the network. The following call to feedforwardnet
creates a two-layer network with 10 neurons in the hidden
layer. (During the configuration step, the number of neurons in the output layer is set to
one, which is the number of elements in each vector of targets.)
net = feedforwardnet; net = configure(net, bodyfatInputs, bodyfatTargets);
Optional arguments can be provided to feedforwardnet
. For instance, the first argument is an array containing the
number of neurons in each hidden layer. (The default setting is 10, which means one hidden
layer with 10 neurons. One hidden layer generally produces excellent results, but you may
want to try two hidden layers, if the results with one are not adequate. Increasing the
number of neurons in the hidden layer increases the power of the network, but requires more
computation and is more likely to produce overfitting.) The second argument contains the
name of the training function to be used. If no arguments are supplied, the default number
of layers is 2, the default number of neurons in the hidden layer is 10, and the default
training function is trainlm
. The default transfer function for
hidden layers is tansig
and the default for the output layer
is purelin
.
The configure
command configures the network
object and also initializes the weights and biases of the network; therefore the network is
ready for training. There are times when you might want to reinitialize the weights, or to
perform a custom initialization. Initializing Weights (init)
explains the details of the initialization process. You can also skip the configuration
step and go directly to training the network. The train
command will automatically configure the network and initialize the
weights.
Other Related Architectures
While two-layer feedforward networks can potentially learn virtually any input-output relationship, feedforward networks with more layers might learn complex relationships more quickly. For most problems, it is best to start with two layers, and then increase to three layers, if the performance with two layers is not satisfactory.
The function cascadeforwardnet
creates cascade-forward
networks. These are similar to feedforward networks, but include a weight connection
from the input to each layer, and from each layer to the successive layers. For example,
a three-layer network has connections from layer 1 to layer 2, layer 2 to layer 3, and
layer 1 to layer 3. The three-layer network also has connections from the input to all
three layers. The additional connections might improve the speed at which the network
learns the desired relationship.
The function patternnet
creates a network that is very
similar to feedforwardnet
, except that it uses the
tansig
transfer function in the last
layer. This network is generally used for pattern recognition. Other networks can learn
dynamic or time-series relationships.
Initializing Weights (init)
Before training a feedforward network, you must initialize the weights and biases.
The configure
command automatically
initializes the weights, but you might want to reinitialize them. You do this with the
init
command. This function takes a
network object as input and returns a network object with all weights and biases
initialized. Here is how a network is initialized (or reinitialized):
net = init(net);