replaceLayer

Замените слой на графике слоев

Описание

пример

newlgraph = replaceLayer(lgraph,layerName,larray) заменяет слой layerName в графике слоев lgraph со слоями в larray.

replaceLayer соединяет слои в larray последовательно и соединяет larray в график слоев.

пример

newlgraph = replaceLayer(lgraph,layerName,larray,'ReconnectBy',mode) дополнительно задает метод повторного соединения слоев.

Примеры

свернуть все

Определите простую сетевую архитектуру и постройте график.

layers = [
    imageInputLayer([28 28 1],'Name','input')    
    convolution2dLayer(3,16,'Padding','same','Name','conv_1')
    reluLayer('Name','relu_1')    
    additionLayer(2,'Name','add')
    fullyConnectedLayer(10,'Name','fc')
    softmaxLayer('Name','softmax')
    classificationLayer('Name','classoutput')];

lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph,'input','add/in2');

figure
plot(lgraph)

Figure contains an axes. The axes contains an object of type graphplot.

Замените слой ReLU в сети слоем нормализации партии . с последующим утечкой слоя ReLU.

larray = [batchNormalizationLayer('Name','BN1')
          leakyReluLayer('Name','leakyRelu_1','Scale',0.1)];
lgraph = replaceLayer(lgraph,'relu_1',larray);

plot(lgraph)

Figure contains an axes. The axes contains an object of type graphplot.

В этом примере показано, как импортировать слои из предварительно обученной сети Keras, заменить неподдерживаемые слои пользовательскими слоями и собрать слои в сеть, готовую к предсказанию.

Импорт сети Keras

Импортируйте слои из сетевой модели Keras. Сеть в 'digitsDAGnetwithnoise.h5' классифицирует изображения цифр.

filename = 'digitsDAGnetwithnoise.h5';
lgraph = importKerasLayers(filename,'ImportWeights',true);
Warning: Unable to import some Keras layers, because they are not 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.

Сеть Keras содержит некоторые слои, которые не поддерживаются Deep Learning Toolbox. The importKerasLayers функция отображает предупреждение и заменяет неподдерживаемые слои слоями-заполнителями.

Постройте график графика слоев с помощью plot.

figure
plot(lgraph)
title("Imported Network")

Figure contains an axes. The axes with title Imported Network contains an object of type graphplot.

Замена слоев

Чтобы заменить слои-заполнители, сначала определите имена заменяемых слоев. Найдите заполнитель слоев используя findPlaceholderLayers.

placeholderLayers = findPlaceholderLayers(lgraph)
placeholderLayers = 
  2x1 PlaceholderLayer array with layers:

     1   'gaussian_noise_1'   PLACEHOLDER LAYER   Placeholder for 'GaussianNoise' Keras layer
     2   'gaussian_noise_2'   PLACEHOLDER LAYER   Placeholder for 'GaussianNoise' Keras layer

Отображение строений Keras этих слоев.

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

Задайте пользовательский слой Гауссова шума. Чтобы создать этот слой, сохраните файл gaussianNoiseLayer.m в текущей папке. Затем создайте два слоя Гауссова шума с такими же строениями, как и импортированные слои Keras.

gnLayer1 = gaussianNoiseLayer(1.5,'new_gaussian_noise_1');
gnLayer2 = gaussianNoiseLayer(0.7,'new_gaussian_noise_2');

Замените слои-заполнители пользовательскими слоями с помощью replaceLayer.

lgraph = replaceLayer(lgraph,'gaussian_noise_1',gnLayer1);
lgraph = replaceLayer(lgraph,'gaussian_noise_2',gnLayer2);

Постройте график обновленного графика слоев с помощью plot.

figure
plot(lgraph)
title("Network with Replaced Layers")

Figure contains an axes. The axes with title Network with Replaced Layers contains an object of type graphplot.

Задайте имена классов

Если импортированный слой классификации не содержит классов, необходимо задать их перед предсказанием. Если вы не задаете классы, то программное обеспечение автоматически устанавливает классы на 1, 2..., N, где N количество классов.

Найдите индекс слоя классификации путем просмотра Layers свойство графика слоев.

lgraph.Layers
ans = 
  15x1 Layer array with layers:

     1   'input_1'                            Image Input             28x28x1 images
     2   'conv2d_1'                           Convolution             20 7x7x1 convolutions with stride [1  1] and padding 'same'
     3   'conv2d_1_relu'                      ReLU                    ReLU
     4   'conv2d_2'                           Convolution             20 3x3x1 convolutions with stride [1  1] and padding 'same'
     5   'conv2d_2_relu'                      ReLU                    ReLU
     6   'new_gaussian_noise_1'               Gaussian Noise          Gaussian noise with standard deviation 1.5
     7   'new_gaussian_noise_2'               Gaussian Noise          Gaussian noise with standard deviation 0.7
     8   'max_pooling2d_1'                    Max Pooling             2x2 max pooling with stride [2  2] and padding 'same'
     9   'max_pooling2d_2'                    Max Pooling             2x2 max pooling with stride [2  2] and padding 'same'
    10   'flatten_1'                          Keras Flatten           Flatten activations into 1-D assuming C-style (row-major) order
    11   'flatten_2'                          Keras Flatten           Flatten activations into 1-D assuming C-style (row-major) order
    12   'concatenate_1'                      Depth concatenation     Depth concatenation of 2 inputs
    13   'dense_1'                            Fully Connected         10 fully connected layer
    14   'activation_1'                       Softmax                 softmax
    15   'ClassificationLayer_activation_1'   Classification Output   crossentropyex

Классификационный слой имеет имя 'ClassificationLayer_activation_1'. Просмотрите слой классификации и проверьте Classes свойство.

cLayer = lgraph.Layers(end)
cLayer = 
  ClassificationOutputLayer with properties:

            Name: 'ClassificationLayer_activation_1'
         Classes: 'auto'
    ClassWeights: 'none'
      OutputSize: 'auto'

   Hyperparameters
    LossFunction: 'crossentropyex'

Потому что Classes свойство слоя 'auto'необходимо задать классы вручную. Установите классы равными 0, 1..., 9, а затем замените импортированный слой классификации на новый.

cLayer.Classes = string(0:9)
cLayer = 
  ClassificationOutputLayer with properties:

            Name: 'ClassificationLayer_activation_1'
         Classes: [0    1    2    3    4    5    6    7    8    9]
    ClassWeights: 'none'
      OutputSize: 10

   Hyperparameters
    LossFunction: 'crossentropyex'

lgraph = replaceLayer(lgraph,'ClassificationLayer_activation_1',cLayer);

Сборка сети

Собрать график слоев можно используя команду assembleNetwork. Функция возвращает DAGNetwork объект, который готов к использованию для предсказания.

net = assembleNetwork(lgraph)
net = 
  DAGNetwork with properties:

         Layers: [15x1 nnet.cnn.layer.Layer]
    Connections: [15x2 table]
     InputNames: {'input_1'}
    OutputNames: {'ClassificationLayer_activation_1'}

Входные параметры

свернуть все

График слоев, заданный как LayerGraph объект. Чтобы создать график слоев, используйте layerGraph.

Имя заменяемого слоя, заданное как строковый скаляр или вектор символов.

Слои сети, заданные как Layer массив.

Список встроенных слоев см. в Списке слоев глубокого обучения.

Метод для повторного соединения слоев, заданный как один из следующих:

  • 'name' - Соедините larray использование входа и выхода имен заменяемого слоя. Для каждого слоя, подключенного к входу замененного слоя, повторно соедините слой с входом с таким же входным именем larray(1). Для каждого слоя, подключенного к выходу замененного слоя, повторно соедините слой с выходом с таким же именем вывода larray(end).

  • 'order' - Соедините larray использование порядка входных имен larray(1) и выходные имена larray(end). Повторно соедините слой, соединенный с iпервый вход замененного слоя в iпервый вход larray(1). Повторно соедините слой, соединенный с jпятый выход замененного слоя в jth выход larray(end).

Типы данных: char | string

Выходные аргументы

свернуть все

Выход графика слоев, возвращается как LayerGraph объект.

Введенный в R2018b