findPlaceholderLayers

Найдите слои заполнителя в сетевой архитектуре импортированными из Keras или ONNX

Описание

пример

placeholderLayers = findPlaceholderLayers(importedLayers) возвращает все слои заполнителя, которые существуют в сетевой архитектуре importedLayers импортированный importKerasLayers или importONNXLayers функции, или созданный functionToLayerGraph функция. Слои заполнителя являются слоями, которые эти функции вставляют вместо слоев, которые не поддерживаются Deep Learning Toolbox™.

Чтобы использовать с импортированной сетью, эта функция требует или Средства импорта Deep Learning Toolbox для пакета поддержки Моделей TensorFlow™-Keras или Конвертера Deep Learning Toolbox для пакета поддержки Формата Модели ONNX™.

[placeholderLayers,indices] = findPlaceholderLayers(importedLayers) также возвращает индексы слоев заполнителя.

Примеры

свернуть все

Задайте сетевой файл Keras, чтобы импортировать слои из.

modelfile = 'digitsDAGnetwithnoise.h5';

Импортируйте сетевую архитектуру. Сеть включает некоторые типы слоя, которые не поддерживаются Deep Learning Toolbox. importKerasLayers функционируйте заменяет каждый неподдерживаемый слой на слой заполнителя и возвращает предупреждающее сообщение.

lgraph = importKerasLayers(modelfile)
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. 
> In nnet.internal.cnn.keras.importKerasLayers (line 26)
  In importKerasLayers (line 102) 

lgraph = 

  LayerGraph with properties:

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

Отобразите импортированные слои сети. Два слоя заполнителя заменяют Гауссовы шумовые слои в сети Keras.

lgraph.Layers
ans = 

  15x1 Layer array with layers:

     1   'input_1'                            Image Input             28x28x1 images
     2   'conv2d_1'                           Convolution             20 7x7 convolutions with stride [1  1] and padding 'same'
     3   'conv2d_1_relu'                      ReLU                    ReLU
     4   'conv2d_2'                           Convolution             20 3x3 convolutions with stride [1  1] and padding 'same'
     5   'conv2d_2_relu'                      ReLU                    ReLU
     6   'gaussian_noise_1'                   PLACEHOLDER LAYER       Placeholder for 'GaussianNoise' Keras layer
     7   'gaussian_noise_2'                   PLACEHOLDER LAYER       Placeholder for 'GaussianNoise' Keras layer
     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 1D assuming C-style (row-major) order
    11   'flatten_2'                          Keras Flatten           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                 softmax
    15   'ClassificationLayer_activation_1'   Classification Output   crossentropyex

Найдите использование слоев заполнителя findPlaceholderLayers. Выходной аргумент содержит два слоя заполнителя это importKerasLayers вставленный вместо Гауссовых шумовых слоев сети Keras.

placeholders = findPlaceholderLayers(lgraph)
placeholders = 

  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

Отобразите настройку каждого слоя заполнителя.

gaussian1.KerasConfiguration
gaussian2.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

В этом примере показано, как импортировать слои из предварительно обученной сети 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. 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'                          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'
      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: [15x1 nnet.cnn.layer.Layer]
    Connections: [15x2 table]
     InputNames: {'input_1'}
    OutputNames: {'ClassificationLayer_activation_1'}

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

свернуть все

Сетевая архитектура импортируется из Keras или ONNX или созданная functionToLayerGraphВ виде Layer массив или LayerGraph объект.

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

свернуть все

Все слои заполнителя в сетевой архитектуре, возвращенной как массив PlaceholderLayer объекты.

Индексы слоев заполнителя, возвращенных как вектор.

  • Если importedLayers массив слоя, затем indices индексы слоев заполнителя в importedLayers.

  • Если importedLayers LayerGraph объект, затем indices индексы слоев заполнителя в importedLayers.Layers.

Если вы удаляете слой из или добавляете слой в Layer массив или LayerGraph объект, затем индексы других слоев в объекте могут измениться. Необходимо использовать findPlaceholderLayers снова найти обновленные индексы остальной части слоев заполнителя.

Советы

  • Если вы установили Средство импорта Deep Learning Toolbox для Моделей TensorFlow-Keras и findPlaceholderLayers не может найти слои заполнителя созданными при импорте сети ONNX, затем попытаться обновить Средство импорта Deep Learning Toolbox для пакета поддержки Моделей TensorFlow-Keras в Add-On Explorer.

Введенный в R2017b