Assemble deep learning network from pretrained layers
assembleNetwork creates deep learning networks from layers
assembleNetwork for the following tasks:
Convert a layer array or layer graph to a network ready for prediction.
Assemble networks from imported layers.
Modify the weights of a trained network.
To train a network from scratch, use
Import the layers from a pretrained Keras network, replace the unsupported layers with custom layers, and assemble the layers into a network ready for prediction.
Import Keras Network
Import the layers from a Keras network model. The network in
'digitsDAGnetwithnoise.h5' classifies images of digits.
filename = 'digitsDAGnetwithnoise.h5'; lgraph = importKerasLayers(filename,'ImportWeights',true);
Warning: Unable to import some Keras layers, because they are not yet supported by the Deep Learning Toolbox. They have been replaced by placeholder layers. To find these layers, call the function findPlaceholderLayers on the returned object.
The Keras network contains some layers that are not supported by Deep Learning Toolbox™. The
importKerasLayers function displays a warning and replaces the unsupported layers with placeholder layers.
Replace Placeholder Layers
To replace the placeholder layers, first identify the names of the layers to replace. Find the placeholder layers using
findPlaceholderLayers and display their Keras configurations.
placeholderLayers = findPlaceholderLayers(lgraph); placeholderLayers.KerasConfiguration
ans = struct with fields: trainable: 1 name: 'gaussian_noise_1' stddev: 1.5000
ans = struct with fields: trainable: 1 name: 'gaussian_noise_2' stddev: 0.7000
Define a custom Gaussian noise layer by saving the file
gaussianNoiseLayer.m in the current folder. Then, create two Gaussian noise layers with the same configurations as the imported Keras layers.
gnLayer1 = gaussianNoiseLayer(1.5,'new_gaussian_noise_1'); gnLayer2 = gaussianNoiseLayer(0.7,'new_gaussian_noise_2');
Replace the placeholder layers with the custom layers using
lgraph = replaceLayer(lgraph,'gaussian_noise_1',gnLayer1); lgraph = replaceLayer(lgraph,'gaussian_noise_2',gnLayer2);
Specify Class Names
The imported classification layer does not contain the classes, so you must specify these before assembling the network. If you do not specify the classes, then the software automatically sets the classes to
N is the number of classes.
The classification layer has the name
'ClassificationLayer_activation_1'. Set the classes to
9, and then replace the imported classification layer with the new one.
cLayer = lgraph.Layers(end); cLayer.Classes = string(0:9); lgraph = replaceLayer(lgraph,'ClassificationLayer_activation_1',cLayer);
Assemble the layer graph using
assembleNetwork. The function returns a
DAGNetwork object that is ready to use for prediction.
net = assembleNetwork(lgraph)
net = DAGNetwork with properties: Layers: [15×1 nnet.cnn.layer.Layer] Connections: [15×2 table]
layers— Network layers
To create a network with all layers connected sequentially, you can use a
Layer array as the input argument. In this case, the returned network is a
A directed acyclic graph (DAG) network has a complex structure in which layers can have
multiple inputs and outputs. To create a DAG network, specify the network architecture
object and then use that layer graph as the input argument to
For a list of built-in layers, see List of Deep Learning Layers.
assembledNet— Assembled network
layers is a
Layer array, then
assembledNet is a
layers is a
LayerGraph object, then
assembledNet is a