functionLayer

Функциональный слой

    Описание

    Функциональный слой применяет заданную функцию к входу слоя.

    Если Deep Learning Toolbox™ не обеспечивает слой, в котором вы нуждаетесь для своей задачи, то можно задать новые слои путем создания функциональных слоев с помощью functionLayer. Функциональные слои только операции поддержки, которые не требуют дополнительных свойств, настраиваемых параметров или состояний. Для слоев, которые требуют этой функциональности, задайте слой как пользовательский слой. Для получения дополнительной информации смотрите, Задают Пользовательские Слои Глубокого обучения.

    Создание

    Описание

    пример

    layer = functionLayer(fun) создает функциональный слой и устанавливает PredictFcn свойство.

    пример

    layer = functionLayer(fun,Name=Value) устанавливает дополнительные свойства с помощью одних или нескольких аргументов name-value. Например, functionLayer(fun,NumInputs=2,NumOutputs=3) указывает, что слой имеет два входных параметров и три выходных параметров. Можно задать несколько аргументов name-value.

    Свойства

    развернуть все

    Функция

    Это свойство доступно только для чтения.

    Функция, чтобы примениться к входу слоя в виде указателя на функцию.

    Заданная функция должна иметь синтаксис [Y1,...,YM] = fun(X1,...,XN), где вводами и выводами является dlarray объекты и M и N соответствуйте NumOutputs и NumInputs свойства, соответственно.

    Входные параметры X1, …, XN соответствуйте входным параметрам слоя с именами, данными InputNames. Выходные параметры Y1, …, YM соответствуйте слою выходные параметры с именами, данными OutputNames.

    Для списка функций та поддержка dlarray введите, см. Список Функций с Поддержкой dlarray.

    Совет

    При использовании слоя необходимо гарантировать, что заданная функция доступна. Например, чтобы гарантировать, что слой может быть снова использован в нескольких live скриптах, сохраните функцию в ее собственном отдельном файле.

    Типы данных: function_handle

    Это свойство доступно только для чтения.

    Отметьте указание, что функция слоя работает с отформатированным dlarray объекты в виде 0 (FALSE) или 1 TRUE.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

    Слой

    Имя слоя в виде вектора символов или строкового скаляра. Для Layer вход массивов, trainNetwork, assembleNetwork, layerGraph, и dlnetwork функции автоматически присваивают имена к слоям с Name установите на ''.

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

    Это свойство доступно только для чтения.

    Однострочное описание слоя в виде строкового скаляра или вектора символов. Это описание появляется, когда слой отображен в Layer массив.

    Если вы не задаете описание слоя, то программное обеспечение отображает операцию слоя.

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

    Это свойство доступно только для чтения.

    Количество входных параметров в виде положительного целого числа.

    Слой должен иметь постоянное число входных параметров. Если PredictFcn поддерживает переменное количество входных параметров с помощью varargin, затем необходимо задать количество входных параметров слоя с помощью NumInputs.

    Если вы не задаете NumInputs, затем программное обеспечение устанавливает NumInputs к nargin(PredictFcn).

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Это свойство доступно только для чтения.

    Введите имена слоя в виде положительного целого числа.

    Если вы не задаете InputNames и NumInputs 1, затем программное обеспечение устанавливает InputNames к {'in'}. Если вы не задаете InputNames и NumInputs больше 1, затем программное обеспечение устанавливает InputNames к {'in1',...,'inN'}, где N количество входных параметров.

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

    Это свойство доступно только для чтения.

    Количество выходных параметров слоя в виде положительного целого числа.

    Слой должен иметь постоянное число выходных параметров. Если PredictFcn поддерживает переменное количество выходных аргументов, затем необходимо задать количество слоя выходные параметры с помощью NumOutputs.

    Если вы не задаете NumOutputs, затем программное обеспечение устанавливает NumOutputs к nargout(PrecitcFcn).

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Это свойство доступно только для чтения.

    Выведите имена слоя в виде массива строк или массива ячеек из символьных векторов.

    Если вы не задаете OutputNames и NumOutputs 1, затем программное обеспечение устанавливает OutputNames к {'out'}. Если вы не задаете OutputNames и NumOutputs больше 1, затем программное обеспечение устанавливает OutputNames к {'out1',...,'outM'}, где M количество выходных параметров.

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

    Примеры

    свернуть все

    Создайте функциональный расположенный на слое объект, который применяет softsign операцию к входу. softsign операция дана функцией f(x)=x1+|x|.

    layer = functionLayer(@(X) X./(1 + abs(X)))
    layer = 
      FunctionLayer with properties:
    
               Name: ''
         PredictFcn: @(X)X./(1+abs(X))
        Formattable: 0
    
       Learnable Parameters
        No properties.
    
       State Parameters
        No properties.
    
      Show all properties
    
    

    Включайте softsign слой в виде функционального слоя в массиве слоя. Укажите, что слой имеет описание "softsign".

    layers = [
        imageInputLayer([28 28 1])
        convolution2dLayer(5,20)
        functionLayer(@(X) X./(1 + abs(X)),Description="softsign")
        maxPooling2dLayer(2,Stride=2)
        fullyConnectedLayer(10)
        softmaxLayer
        classificationLayer]
    layers = 
      7x1 Layer array with layers:
    
         1   ''   Image Input             28x28x1 images with 'zerocenter' normalization
         2   ''   Convolution             20 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
         3   ''   Function                softsign
         4   ''   Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
         5   ''   Fully Connected         10 fully connected layer
         6   ''   Softmax                 softmax
         7   ''   Classification Output   crossentropyex
    

    Создайте функциональный слой, который переформатировал входные данные с форматом "CB"(образуйте канал, пакет) иметь формат "SBC" (пространственный, пакет, канал). Чтобы указать, что слой работает с отформатированными данными, устанавливает Formattable опция к true.

    layer = functionLayer(@(X) dlarray(X,"SBC"),Formattable=true)
    layer = 
      FunctionLayer with properties:
    
               Name: ''
         PredictFcn: @(X)dlarray(X,"SBC")
        Formattable: 1
    
       Learnable Parameters
        No properties.
    
       State Parameters
        No properties.
    
      Show all properties
    
    

    Включайте функциональный слой, который переформатировал вход, чтобы иметь формат "SB" в массиве слоя. Укажите, что слой имеет описание "channel to spatial".

    layers = [
        featureInputLayer(10)
        functionLayer(@(X) dlarray(X,"SBC"),Formattable=true,Description="channel to spatial")
        convolution1dLayer(3,16)]
    layers = 
      3x1 Layer array with layers:
    
         1   ''   Feature Input   10 features
         2   ''   Function        channel to spatial
         3   ''   Convolution     16 3 convolutions with stride 1 and padding [0  0]
    

    В этой сети 1D слой свертки применяет операцию свертки по "S" (пространственная) размерность его входных данных. Это эквивалентно свертке по "C" (канал) размерность сетевых входных данных.

    Преобразуйте массив слоя в dlnetwork возразите и передайте случайный массив данных с форматом "CB".

    dlnet = dlnetwork(layers);
    
    X = rand(10,64);
    dlX = dlarray(X,"CB");
    
    dlY = forward(dlnet,dlX);

    Просмотрите размер и формат выходных данных.

    size(dlY)
    ans = 1×3
    
         8    16    64
    
    
    dims(dlY)
    ans = 
    'SCB'
    

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

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

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

    filename = "digitsNet.h5";
    layers = importKerasLayers(filename,ImportWeights=true)
    Warning: Unable to import layer. Keras layer 'Activation' with the specified settings is not supported. The problem was: Activation type 'softsign' is not supported.
    
    Warning: Unable to import layer. Keras layer 'Activation' with the specified settings is not supported. The problem was: Activation type 'softsign' is not supported.
    
    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.
    
    layers = 
      13x1 Layer array with layers:
    
         1   'ImageInputLayer'               Image Input             28x28x1 images
         2   'conv2d'                        Convolution             8 3x3x1 convolutions with stride [1  1] and padding [0  0  0  0]
         3   'conv2d_softsign'               PLACEHOLDER LAYER       Placeholder for 'Activation' Keras layer
         4   'max_pooling2d'                 Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
         5   'conv2d_1'                      Convolution             16 3x3x8 convolutions with stride [1  1] and padding [0  0  0  0]
         6   'conv2d_1_softsign'             PLACEHOLDER LAYER       Placeholder for 'Activation' Keras layer
         7   'max_pooling2d_1'               Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
         8   'flatten'                       Keras Flatten           Flatten activations into 1-D assuming C-style (row-major) order
         9   'dense'                         Fully Connected         100 fully connected layer
        10   'dense_relu'                    ReLU                    ReLU
        11   'dense_1'                       Fully Connected         10 fully connected layer
        12   'dense_1_softmax'               Softmax                 softmax
        13   'ClassificationLayer_dense_1'   Classification Output   crossentropyex
    

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

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

    Чтобы заменить слои заполнителя, сначала идентифицируйте имена слоев, чтобы заменить. Найдите слои заполнителя с помощью findPlaceholderLayers функция.

    placeholderLayers = findPlaceholderLayers(layers)
    placeholderLayers = 
      2x1 PlaceholderLayer array with layers:
    
         1   'conv2d_softsign'     PLACEHOLDER LAYER   Placeholder for 'Activation' Keras layer
         2   'conv2d_1_softsign'   PLACEHOLDER LAYER   Placeholder for 'Activation' Keras layer
    

    Замените слои заполнителя на функциональные слои с функцией, заданной softsign функция, перечисленная в конце примера.

    Создайте функциональный слой с функцией, заданной softsign функция, присоединенная к этому примеру как вспомогательный файл. Чтобы получить доступ к этой функции, откройте этот пример как live скрипт. Установите описание слоя на "softsign".

    layer = functionLayer(@softsign,Description="softsign");

    Замените слои с помощью replaceLayer функция. Использовать replaceLayer функция, сначала преобразуйте массив слоя в график слоев.

    lgraph = layerGraph(layers);
    lgraph = replaceLayer(lgraph,"conv2d_softsign",layer);
    lgraph = replaceLayer(lgraph,"conv2d_1_softsign",layer);

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

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

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

    lgraph.Layers
    ans = 
      13x1 Layer array with layers:
    
         1   'ImageInputLayer'               Image Input             28x28x1 images
         2   'conv2d'                        Convolution             8 3x3x1 convolutions with stride [1  1] and padding [0  0  0  0]
         3   'layer'                         Function                softsign
         4   'max_pooling2d'                 Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
         5   'conv2d_1'                      Convolution             16 3x3x8 convolutions with stride [1  1] and padding [0  0  0  0]
         6   'layer_1'                       Function                softsign
         7   'max_pooling2d_1'               Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
         8   'flatten'                       Keras Flatten           Flatten activations into 1-D assuming C-style (row-major) order
         9   'dense'                         Fully Connected         100 fully connected layer
        10   'dense_relu'                    ReLU                    ReLU
        11   'dense_1'                       Fully Connected         10 fully connected layer
        12   'dense_1_softmax'               Softmax                 softmax
        13   'ClassificationLayer_dense_1'   Classification Output   crossentropyex
    

    Слой классификации имеет имя 'ClassificationLayer_dense_1'. Просмотрите слой классификации и проверяйте Classes свойство.

    cLayer = lgraph.Layers(end)
    cLayer = 
      ClassificationOutputLayer with properties:
    
                Name: 'ClassificationLayer_dense_1'
             Classes: 'auto'
        ClassWeights: 'none'
          OutputSize: 'auto'
    
       Hyperparameters
        LossFunction: 'crossentropyex'
    
    

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

    cLayer.Classes = string(0:9);
    lgraph = replaceLayer(lgraph,"ClassificationLayer_dense_1",cLayer);

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

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

    net = assembleNetwork(lgraph)
    net = 
      DAGNetwork with properties:
    
             Layers: [13x1 nnet.cnn.layer.Layer]
        Connections: [12x2 table]
         InputNames: {'ImageInputLayer'}
        OutputNames: {'ClassificationLayer_dense_1'}
    
    

    Тестирование сети

    Сделайте предсказания с сетью с помощью набора тестовых данных.

    [XTest,YTest] = digitTest4DArrayData;
    YPred = classify(net,XTest);

    Просмотрите точность.

    mean(YPred == YTest)
    ans = 0.9900
    

    Визуализируйте предсказания в матрице беспорядка.

    confusionchart(YTest,YPred)

    Figure contains an object of type ConfusionMatrixChart.

    Введенный в R2021b