Задайте пользовательские промежуточные слои глубокого обучения

Совет

Эта тема объясняет, как задать пользовательские слои глубокого обучения для ваших проблем. Для списка встроенных слоев в Deep Learning Toolbox™ смотрите Список слоев глубокого обучения.

Чтобы изучить, как задать пользовательские выходные слои, смотрите, Задают Пользовательское Глубокое обучение Выходные Слои.

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

Промежуточная архитектура слоя

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

Заставляя форварда пройти через сеть, каждый слой берет выходные параметры предыдущих слоев, применяет функцию, и затем выходные параметры (вперед распространяет), результаты к следующим слоям. Слои с сохранением информации, такие как слои LSTM, также обновляют состояние слоя.

Слои могут иметь несколько вводов или выводов. Например, слой может взять X1, …, XN от нескольких предыдущих слоев и вперед распространить выходные параметры Z1, …, Z M к последующим слоям.

В конце прямой передачи сети выходной слой вычисляет потерю L между предсказаниями Y и цели T.

Во время обратного прохода сети каждый слой берет производные потери относительно выходных параметров слоя, вычисляет производные потери L относительно входных параметров, и затем назад распространяет результаты. Если слой имеет настраиваемые параметры, то слой также вычисляет производные весов слоя (настраиваемые параметры). Слой использует производные весов, чтобы обновить настраиваемые параметры.

Следующая фигура описывает поток данных через глубокую нейронную сеть и подсвечивает поток данных через слой с одним входом X, одним выходом Z и настраиваемым параметром W.

Промежуточный шаблон слоя

Чтобы задать пользовательский промежуточный слой, используйте этот шаблон определения класса. Этот шаблон обрисовывает в общих чертах структуру промежуточного определения класса слоя. Это обрисовывает в общих чертах:

  • Дополнительный properties блоки для свойств слоя, настраиваемых параметров и параметров состояния. Для получения дополнительной информации смотрите Промежуточные Свойства слоя.

  • Функция конструктора слоя.

  • predict функционируйте и дополнительный forward функция. Для получения дополнительной информации смотрите Прямые Функции.

  • Дополнительный resetState функция для слоев со свойствами состояний. Для получения дополнительной информации смотрите Функцию состояния Сброса.

  • Дополнительный backward функция. Для получения дополнительной информации смотрите Обратную Функцию.

classdef myLayer < nnet.layer.Layer % & nnet.layer.Formattable (Optional)

    properties
        % (Optional) Layer properties.

        % Declare layer properties here.
    end

    properties (Learnable)
        % (Optional) Layer learnable parameters.

        % Declare learnable parameters here.
    end

    properties (State)
        % (Optional) Layer state parameters.

        % Declare state parameters here.
    end

    properties (Learnable, State)
        % (Optional) Nested dlnetwork objects with both learnable
        % parameters and state.

        % Declare nested networks with learnable and state parameters here.
    end

    methods
        function layer = myLayer()
            % (Optional) Create a myLayer.
            % This function must have the same name as the class.

            % Define layer constructor function here.
        end

        function [Z,state] = predict(layer,X)
            % Forward input data through the layer at prediction time and
            % output the result and updated state.
            %
            % Inputs:
            %         layer - Layer to forward propagate through 
            %         X     - Input data
            % Outputs:
            %         Z     - Output of layer forward function
            %         state - (Optional) Updated layer state.
            %
            %  - For layers with multiple inputs, replace X with X1,...,XN, 
            %    where N is the number of inputs.
            %  - For layers with multiple outputs, replace Z with 
            %    Z1,...,ZM, where M is the number of outputs.
            %  - For layers with multiple state parameters, replace state 
            %    with state1,...,stateK, where K is the number of state 
            %    parameters.

            % Define layer predict function here.
        end

        function [Z,state,memory] = forward(layer,X)
            % (Optional) Forward input data through the layer at training
            % time and output the result, updated state, and a memory
            % value.
            %
            % Inputs:
            %         layer - Layer to forward propagate through 
            %         X     - Layer input data
            % Outputs:
            %         Z      - Output of layer forward function 
            %         state  - (Optional) Updated layer state 
            %         memory - (Optional) Memory value for custom backward
            %                  function
            %
            %  - For layers with multiple inputs, replace X with X1,...,XN, 
            %    where N is the number of inputs.
            %  - For layers with multiple outputs, replace Z with 
            %    Z1,...,ZM, where M is the number of outputs.
            %  - For layers with multiple state parameters, replace state 
            %    with state1,...,stateK, where K is the number of state 
            %    parameters.

            % Define layer forward function here.
        end

        function layer = resetState(layer)
            % (Optional) Reset layer state.

            % Define reset state function here.
        end

        function [dLdX,dLdW,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory)
            % (Optional) Backward propagate the derivative of the loss
            % function through the layer.
            %
            % Inputs:
            %         layer   - Layer to backward propagate through 
            %         X       - Layer input data 
            %         Z       - Layer output data 
            %         dLdZ    - Derivative of loss with respect to layer 
            %                   output
            %         dLdSout - (Optional) Derivative of loss with respect 
            %                   to state output
            %         memory  - Memory value from forward function
            % Outputs:
            %         dLdX   - Derivative of loss with respect to layer input
            %         dLdW   - (Optional) Derivative of loss with respect to
            %                  learnable parameter 
            %         dLdSin - (Optional) Derivative of loss with respect to 
            %                  state input
            %
            %  - For layers with state parameters, the backward syntax must
            %    include both dLdSout and dLdSin, or neither.
            %  - For layers with multiple inputs, replace X and dLdX with
            %    X1,...,XN and dLdX1,...,dLdXN, respectively, where N is
            %    the number of inputs.
            %  - For layers with multiple outputs, replace Z and dlZ with
            %    Z1,...,ZM and dLdZ,...,dLdZM, respectively, where M is the
            %    number of outputs.
            %  - For layers with multiple learnable parameters, replace 
            %    dLdW with dLdW1,...,dLdWP, where P is the number of 
            %    learnable parameters.
            %  - For layers with multiple state parameters, replace dLdSin
            %    and dLdSout with dLdSin1,...,dLdSinK and 
            %    dLdSout1,...dldSoutK, respectively, where K is the number
            %    of state parameters.

            % Define layer backward function here.
        end
    end
end

Отформатированные вводы и выводы

Используя dlarray объекты делают работу с высокими размерными данными легче, позволяя вам пометить размерности. Например, можно пометить, которому размерности соответствуют пространственный, время, канал, и обрабатывают размерности в пакетном режиме с помощью "S"TC, и "B" метки, соответственно. Для незаданных и других размерностей используйте "U" метка. Для dlarray возразите функциям, которые действуют по конкретным размерностям, можно задать метки размерности путем форматирования dlarray возразите непосредственно, или при помощи DataFormat опция.

Используя отформатированный dlarray объекты в пользовательских слоях также позволяют вам задавать слои, где вводы и выводы имеют различные форматы, такие как слои, которые переставляют, добавляют или удаляют размерности. Например, можно задать слой, который берет в качестве входа мини-пакет изображений с форматом "SSCB" (пространственный, пространственный, канал, пакет) и выход мини-пакет последовательностей с форматом "CBT" (образуйте канал, обработайте в пакетном режиме, время). Используя отформатированный dlarray объекты также позволяют вам задавать слои, которые могут управлять на данных с различными форматами ввода, например, слоями, которые поддерживают входные параметры с форматами "SSCB" (пространственный, пространственный, канал, пакет) и "CBT" (образуйте канал, обработайте в пакетном режиме, время).

Если вы не задаете обратную функцию, то функции слоя, по умолчанию, получают, восстановил после форматирования dlarray объекты, как введено. Указывать, что слой получает, отформатировало dlarray объекты, как введено и также выходные параметры отформатировали dlarray объекты, также наследуйтесь nnet.layer.Formattable класс при определении пользовательского слоя.

Для примера, показывающего, как задать пользовательский слой с отформатированными входными параметрами, смотрите, Задают Пользовательский Слой Глубокого обучения с Отформатированными Входными параметрами.

Промежуточные свойства слоя

Объявите свойства слоя в properties раздел определения класса.

По умолчанию пользовательские промежуточные слои имеют эти свойства. Не объявляйте эти свойства в properties раздел.

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

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

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

Type

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

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

NumInputsКоличество входных параметров слоя в виде положительного целого числа. Если вы не задаете это значение, то программное обеспечение автоматически устанавливает NumInputs к количеству имен в InputNames. Значение по умолчанию равняется 1.
InputNamesВведите имена слоя в виде массива ячеек из символьных векторов. Если вы не задаете это значение и NumInputs больше 1, затем программное обеспечение автоматически устанавливает InputNames к {'in1',...,'inN'}, где N равно NumInputs. Значением по умолчанию является {'in'}.
NumOutputsКоличество выходных параметров слоя в виде положительного целого числа. Если вы не задаете это значение, то программное обеспечение автоматически устанавливает NumOutputs к количеству имен в OutputNames. Значение по умолчанию равняется 1.
OutputNamesВыведите имена слоя в виде массива ячеек из символьных векторов. Если вы не задаете это значение и NumOutputs больше 1, затем программное обеспечение автоматически устанавливает OutputNames к {'out1',...,'outM'}, где M равно NumOutputs. Значением по умолчанию является {'out'}.

Если слой не имеет никаких других свойств, то можно не использовать properties раздел.

Совет

Если вы создаете слой с несколькими входными параметрами, то необходимо установить любого NumInputs или InputNames свойства в конструкторе слоя. Если вы создаете слой с несколькими выходными параметрами, то необходимо установить любого NumOutputs или OutputNames свойства в конструкторе слоя. Для примера смотрите, Задают Пользовательский Слой Глубокого обучения с Несколькими Входными параметрами.

Настраиваемые параметры

Объявите настраиваемые параметры слоя в properties (Learnable) раздел определения класса. Можно задать числовые массивы или dlnetwork объекты как настраиваемые параметры. Если dlnetwork объект имеет и настраиваемые параметры и параметры состояния (например, dlnetwork объект, который содержит слой LSTM), затем необходимо задать его в properties (Learnable, State) раздел. Если слой не имеет никаких настраиваемых параметров, то можно не использовать properties разделы с Learnable атрибут.

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

ФункцияОписание
setLearnRateFactorУстановитесь изучить коэффициент уровня настраиваемого параметра.
setL2FactorУстановитесь коэффициент регуляризации L2 настраиваемого параметра.
getLearnRateFactorПолучите изучить фактор уровня настраиваемого параметра.
getL2FactorПолучите фактор регуляризации L2 настраиваемого параметра.

Чтобы задать фактор скорости обучения и фактор L2 настраиваемого параметра, используйте синтаксисы layer = setLearnRateFactor(layer,parameterName,value) и layer = setL2Factor(layer,parameterName,value), соответственно.

Чтобы получить значение фактора скорости обучения и фактора L2 настраиваемого параметра, используйте синтаксисы getLearnRateFactor(layer,parameterName) и getL2Factor(layer,parameterName) соответственно.

Например, этот синтаксис устанавливается изучить коэффициент уровня настраиваемого параметра с именем "Alpha" к 0.1.

layer = setLearnRateFactor(layer,"Alpha",0.1);

Параметры состояния

Для слоев с сохранением информации, таких как текущие слои, объявляют параметры состояния слоя в properties (State) раздел определения класса. Для dlnetwork объекты, которые имеют и настраиваемые параметры и параметры состояния (например, dlnetwork объект, который содержит слой LSTM), затем необходимо задать его в properties (Learnable, State) раздел. Если слой не имеет никаких параметров состояния, то можно не использовать properties разделы с State атрибут.

Если слой имеет параметры состояния, то прямые функции должны также возвратить обновленное состояние слоя. Для получения дополнительной информации смотрите Прямые Функции.

Чтобы задать пользовательскую функцию состояния сброса, включайте функцию с синтаксисом layer = resetState(layer) в определении класса. Для получения дополнительной информации смотрите Функцию состояния Сброса.

Передайте функции

Некоторые слои ведут себя по-другому во время обучения и во время предсказания. Например, слой уволенного выполняет уволенного только во время обучения и не оказывает влияния во время предсказания. Слой использует одну из двух функций, чтобы выполнить прямую передачу: predict или forward. Если прямая передача во время предсказания, то слой использует predict функция. Если прямая передача в учебное время, то слой использует forward функция. Если вы не требуете двух различных функций в течение времени предсказания и учебного времени, то можно не использовать forward функция. В этом случае слой использует predict в учебное время.

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

Если вы задаете обоих пользовательский forward функционируйте и пользовательский backward функция, затем прямая функция должна возвратить memory вывод .

predict синтаксис функций зависит от типа слоя.

  • Z = predict(layer,X) вперед входные данные X через слой и выходные параметры результат Z, где layer имеет один вход, один выход.

  • [Z,state] = predict(layer,X) также выводит обновленный параметр состояния state, где layer имеет один параметр состояния.

Можно настроить синтаксисы для слоев с несколькими входными параметрами, несколькими выходными параметрами или несколькими параметрами состояния:

  • Для слоев с несколькими входными параметрами замените X с X1,...,XN, где N количество входных параметров. NumInputs свойство должно совпадать с N.

  • Для слоев с несколькими выходными параметрами замените Z с Z1,...,ZM, где M количество выходных параметров. NumOutputs свойство должно совпадать с M.

  • Для слоев с несколькими параметрами состояния замените state с state1,...,stateK, где K количество параметров состояния.

Совет

Если количество входных параметров к слою может варьироваться, то используйте varargin вместо X1,…,XN. В этом случае, varargin массив ячеек входных параметров, где varargin{i} соответствует Xi.

Если количество выходных параметров может варьироваться, то используйте varargout вместо Z1,…,ZN. В этом случае, varargout массив ячеек выходных параметров, где varargout{j} соответствует Zj.

Совет

Если пользовательский слой имеет dlnetwork объект для настраиваемого параметра, затем в predict функция пользовательского слоя, используйте predict функция для dlnetwork. Используя dlnetwork объект predict функция гарантирует, что программное обеспечение использует правильные операции слоя для предсказания.

forward синтаксис функций зависит от типа слоя:

  • Z = forward(layer,X) вперед входные данные X через слой и выходные параметры результат Z, где layer имеет один вход, один выход.

  • [Z,state] = forward(layer,X) также выводит обновленный параметр состояния state, где layer имеет один параметр состояния.

  • [__,memory] = forward(layer,X) также возвращает значение памяти для пользовательского backward функция с помощью любого из предыдущих синтаксисов. Если слой имеет обоих пользовательский forward функционируйте и пользовательский backward функция, затем прямая функция должна возвратить значение памяти.

Можно настроить синтаксисы для слоев с несколькими входными параметрами, несколькими выходными параметрами или несколькими параметрами состояния:

  • Для слоев с несколькими входными параметрами замените X с X1,...,XN, где N количество входных параметров. NumInputs свойство должно совпадать с N.

  • Для слоев с несколькими выходными параметрами замените Z с Z1,...,ZM, где M количество выходных параметров. NumOutputs свойство должно совпадать с M.

  • Для слоев с несколькими параметрами состояния замените state с state1,...,stateK, где K количество параметров состояния.

Совет

Если количество входных параметров к слою может варьироваться, то используйте varargin вместо X1,…,XN. В этом случае, varargin массив ячеек входных параметров, где varargin{i} соответствует Xi.

Если количество выходных параметров может варьироваться, то используйте varargout вместо Z1,…,ZN. В этом случае, varargout массив ячеек выходных параметров, где varargout{j} соответствует Zj.

Совет

Если пользовательский слой имеет dlnetwork объект для настраиваемого параметра, затем в forward функция пользовательского слоя, используйте forward функция dlnetwork объект. Используя dlnetwork объект forward функция гарантирует, что программное обеспечение использует правильные операции слоя для обучения.

Размерности входных параметров зависят от типа данных и выхода связанных слоев:

Вход слояВведите размерРазмерность наблюдения
Характеристические векторыc-by-N, где c соответствует количеству каналов и N, является количеством наблюдений.2
2D изображенияh-by-w-by-c-by-N, где h, w и c соответствуют высоте, ширине, и количеству каналов изображений, соответственно, и N, является количеством наблюдений.4
3-D изображенияh-by-w-by-d-by-c-by-N, где h, w, d и c соответствуют высоте, ширине, глубине, и количеству каналов 3-D изображений, соответственно, и N, является количеством наблюдений.5
Векторные последовательностиc-by-N-by-S, где c является количеством функций последовательностей, N, является количеством наблюдений, и S является длиной последовательности.2
2D последовательности изображенийh-by-w-by-c-by-N-by-S, где h, w и c соответствуют высоте, ширине и количеству каналов изображений, соответственно, N, является количеством наблюдений, и S является длиной последовательности.4
3-D последовательности изображенийh-by-w-by-d-by-c-by-N-by-S, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов 3-D изображений, соответственно, N, является количеством наблюдений, и S является длиной последовательности.5

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

Выходные параметры пользовательского слоя прямые функции не должны быть комплексными. Если predict или forward функции вашего пользовательского слоя включают комплексные числа, преобразуют все выходные параметры в вещественные значения прежде, чем возвратить их. Используя комплексные числа в predict или forward функции вашего пользовательского слоя могут вести, чтобы объединить настраиваемые параметры. Если вы используете автоматическое дифференцирование (другими словами, вы не пишете, обратная функция для вашего пользовательского слоя) затем преобразуют все настраиваемые параметры в вещественные значения в начале функционального расчета. Выполнение так гарантирует, что выходные параметры автоматически сгенерированных обратных функций не являются комплексными.

Сбросьте функцию состояния

Когда DAGNetwork или SeriesNetwork объекты содержат слои с параметрами состояния, можно сделать предсказания и обновить состояния слоя с помощью predictAndUpdateState и classifyAndUpdateState функции. Можно сбросить сетевое состояние с помощью resetState функция.

resetState функция для DAGNetwork, SeriesNetwork, и dlnetwork объекты, по умолчанию, не оказывают влияния на пользовательские слои с параметрами состояния. Задавать поведение слоя для resetState функция для сетевых объектов, задайте дополнительный слой resetState функция в определении слоя, которое сбрасывает параметры состояния.

resetState функция должна иметь синтаксис layer = resetState(layer), где возвращенному слою сбрасывали свойства состояний.

Обратная функция

Обратная функция слоя вычисляет производные потери относительно входных данных, и затем выходные параметры (назад распространяет), результаты к предыдущему слою. Если слой имеет настраиваемые параметры (например, веса слоя), то backward также вычисляет производные настраиваемых параметров. При использовании trainNetwork функция, слой автоматически обновляет настраиваемые параметры с помощью этих производных во время обратного прохода.

Определение обратной функции является дополнительным. Если вы не задаете обратную функцию и слой вперед, функции поддерживают dlarray объекты, затем программное обеспечение автоматически определяет обратную функцию с помощью автоматического дифференцирования. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray. Задайте пользовательскую обратную функцию, когда это необходимо, к:

  • Используйте определенный алгоритм, чтобы вычислить производные.

  • Используйте операции в прямых функциях, которые не поддерживают dlarray объекты.

Пользовательские слои с learnable dlnetwork объекты не поддерживают пользовательские обратные функции.

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

backward синтаксис функций зависит от типа слоя.

  • dLdX = backward(layer,X,Z,dLdZ,memory) возвращает производные dLdX из потери относительно входа слоя, где layer имеет один вход и один выход. Z соответствует прямому функциональному выходу и dLdZ соответствует производной потери относительно Z. Входной параметр функции memory соответствует выходу memory прямой функции.

  • [dLdX,dLdW] = backward(layer,X,Z,dLdZ,memory) также возвращает производный dLdW из потери относительно настраиваемого параметра, где layer имеет один настраиваемый параметр.

  • [dLdX,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory) также возвращает производный dLdSin из потери относительно входа состояния с помощью любого из предыдущих синтаксисов, где layer имеет один параметр состояния и dLdSout соответствует производной потери относительно состояния слоя выход.

  • [dLdX,dLdW,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory) также возвращает производный dLdW из потери относительно настраиваемого параметра и возвращает производный dLdSin из потери относительно входа состояния слоя с помощью любого из предыдущих синтаксисов, где layer имеет один параметр состояния и один настраиваемый параметр.

Можно настроить синтаксисы для слоев с несколькими входными параметрами, несколькими выходными параметрами, несколькими настраиваемыми параметрами или несколькими параметрами состояния:

  • Для слоев с несколькими входными параметрами замените X и dLdX с X1,...,XN и dLdX1,...,dLdXN, соответственно, где N количество входных параметров.

  • Для слоев с несколькими выходными параметрами замените Z и dLdZ с Z1,...,ZM и dLdZ1,...,dLdZM, соответственно, где M количество выходных параметров.

  • Для слоев с несколькими настраиваемыми параметрами замените dLdW с dLdW1,...,dLdWP, где P количество настраиваемых параметров.

  • Для слоев с несколькими параметрами состояния замените dLdSin и dLdSout с dLdSin1,...,dLdSinK и dLdSout1,...,dLdSoutK, соответственно, где K количество параметров состояния.

Чтобы уменьшать использование памяти путем предотвращения неиспользуемых переменных, являющихся сохраненным между прямым и обратным проходом, замените соответствующие входные параметры на ~.

Совет

Если количество входных параметров к backward может варьироваться, затем использовать varargin вместо входных параметров после layer. В этом случае, varargin массив ячеек входных параметров, где первый N элементы соответствуют N входные параметры слоя, следующий M элементы соответствуют M слой выходные параметры, следующий M элементы соответствуют производным потери относительно M слой выходные параметры, следующий K элементы соответствуют K производные потери относительно K состояния выходные параметры и последний элемент соответствуют memory.

Если количество выходных параметров может варьироваться, то используйте varargout вместо выходных аргументов. В этом случае, varargout массив ячеек выходных параметров, где первый N элементы соответствуют N производные потери относительно N входные параметры слоя, следующий P элементы соответствуют производным потери относительно P настраиваемые параметры и следующий K элементы соответствуют производным потери относительно K входные параметры состояния.

Значения X и Z эквивалентны в прямых функциях. Размерности dLdZ совпадают с размерностями Z.

Размерности и тип данных dLdX совпадают с размерностями и типом данных X. Размерности и типы данных dLdW совпадают с размерностями и типами данных W.

Чтобы вычислить производные потери, можно использовать цепочечное правило:

LX(i)=jLZjZjX(i)

LWi=jLZjZjWi

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

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

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

Совместимость с GPU

Если слой вперед функции полностью поддерживает dlarray объекты, затем слоем является совместимый графический процессор. В противном случае, чтобы быть совместимым графическим процессором, функции слоя должны поддержать входные параметры и возвратить выходные параметры типа gpuArray (Parallel Computing Toolbox).

Многие MATLAB® поддержка встроенных функций gpuArray (Parallel Computing Toolbox) и dlarray входные параметры. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray. Для списка функций, которые выполняются на графическом процессоре, смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox). Чтобы использовать графический процессор для глубокого обучения, у вас должно также быть поддерживаемое устройство графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Для получения дополнительной информации о работе с графическими процессорами в MATLAB смотрите, что графический процессор Вычисляет в MATLAB (Parallel Computing Toolbox).

Совместимость генерации кода

Чтобы создать пользовательский слой, который поддерживает генерацию кода:

  • Слой должен задать прагму %#codegen в определении слоя.

  • Входные параметры predict должен быть:

    • Сопоставимый в размерности. Каждый вход должен иметь то же количество размерностей.

    • Сопоставимый в пакетном размере. Каждый вход должен иметь тот же пакетный размер.

  • Выходные параметры predict должно быть сопоставимым в размерности и пакетном размере с входными параметрами слоя.

  • Нескалярные свойства должны иметь один тип, дважды, или символьный массив.

  • Скалярные свойства должны иметь тип, числовой, логический, или строка.

Генерация кода поддерживает промежуточные слои с 2D изображением или входом функции только. Генерация кода не делает уровней поддержки со свойствами состояний (свойства с атрибутом State).

Для примера, показывающего, как создать пользовательский слой, который поддерживает генерацию кода, смотрите, Задают Пользовательский Слой Глубокого обучения для Генерации кода.

Сетевой состав

Чтобы создать пользовательский слой, который сам задает график слоев, можно объявить dlnetwork возразите как настраиваемый параметр в properties (Learnable) раздел определения слоя. Этот метод известен как сетевой состав. Можно использовать сетевой состав для:

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

  • Создайте сеть с потоком управления, например, сеть с разделом, который может динамически измениться в зависимости от входных данных.

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

Для вложенных сетей, которые имеют и настраиваемые параметры и параметры состояния, например, сети с нормализацией партии. или слоями LSTM, объявляют сеть в properties (Learnable, State) раздел определения слоя.

Совместимость с GPU

Если слой вперед функции полностью поддерживает dlarray объекты, затем слоем является совместимый графический процессор. В противном случае, чтобы быть совместимым графическим процессором, функции слоя должны поддержать входные параметры и возвратить выходные параметры типа gpuArray (Parallel Computing Toolbox).

Много поддержки встроенных функций MATLAB gpuArray (Parallel Computing Toolbox) и dlarray входные параметры. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray. Для списка функций, которые выполняются на графическом процессоре, смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox). Чтобы использовать графический процессор для глубокого обучения, у вас должно также быть поддерживаемое устройство графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Для получения дополнительной информации о работе с графическими процессорами в MATLAB смотрите, что графический процессор Вычисляет в MATLAB (Parallel Computing Toolbox).

Проверяйте валидность слоя

Если вы создаете пользовательский слой глубокого обучения, то можно использовать checkLayer функционируйте, чтобы проверять, что слой допустим. Функция проверяет, что слои для валидности, совместимости с GPU, правильно задали градиенты и совместимость генерации кода. Чтобы проверять, что слой допустим, запустите следующую команду:

checkLayer(layer,validInputSize)
где layer экземпляр слоя, validInputSize векторный массив или массив ячеек, задающий допустимые входные размеры к слою. Чтобы свериться с несколькими наблюдениями, используйте ObservationDimension опция. Чтобы проверять на совместимость генерации кода, установите CheckCodegenCompatibility опция к 1 TRUE. Для больших входных размеров проверки градиента занимают больше времени, чтобы запуститься. Чтобы ускорить тесты, задайте меньший допустимый входной размер.

Для получения дополнительной информации смотрите Проверку Пользовательская Валидность Слоя.

Проверяйте валидность пользовательского слоя Используя checkLayer

Проверяйте валидность слоя пользовательского слоя preluLayer.

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

Создайте экземпляр слоя и проверяйте его валидность с помощью checkLayer. Задайте допустимый входной размер, чтобы быть размером одного наблюдения за типичным входом к слою. Слой ожидает 4-D входные параметры массивов, где первые три измерения соответствуют высоте, ширине и количеству каналов предыдущего слоя выход, и четвертая размерность соответствует наблюдениям.

Задайте типичный размер входа наблюдения и установите ObservationDimension опция к 4.

layer = preluLayer(20);
validInputSize = [24 24 20];
checkLayer(layer,validInputSize,ObservationDimension=4)
Skipping GPU tests. No compatible GPU device found.
 
Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the 'CheckCodegenCompatibility' and 'ObservationDimension' options.
 
Running nnet.checklayer.TestLayerWithoutBackward
.......... ........
Done nnet.checklayer.TestLayerWithoutBackward
__________

Test Summary:
	 18 Passed, 0 Failed, 0 Incomplete, 10 Skipped.
	 Time elapsed: 1.1055 seconds.

Здесь, функция не обнаруживает проблем со слоем.

Смотрите также

| | | | | | | | |

Похожие темы