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)

Замените слой ReLU в сети с пакетным слоем нормализации, сопровождаемым текучим слоем ReLU.

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

plot(lgraph)

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

Импортируйте сеть Keras

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

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.

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

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

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

Замените слои заполнителя

Чтобы заменить слои заполнителя, сначала идентифицируйте имена слоев, чтобы заменить. Найдите слои заполнителя с помощью 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")

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

Если импортированный слой классификации не содержит классы, то необходимо задать их перед прогнозом. Если вы не задаете классы, то программное обеспечение автоматически устанавливает классы на 1, 2N, где 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'                          Flatten C-style         Flatten activations into 1D assuming C-style (row-major) order
    11   'flatten_2'                          Flatten C-style         Flatten activations into 1D 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'
      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]
      OutputSize: 10

   Hyperparameters
    LossFunction: 'crossentropyex'

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

Соберите сеть

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

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

         Layers: [15×1 nnet.cnn.layer.Layer]
    Connections: [15×2 table]

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

свернуть все

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

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

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

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

Метод, чтобы повторно подключить слои, заданные как одно из следующего:

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

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

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

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

свернуть все

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

Введенный в R2018b