Задайте пользовательское глубокое обучение Выходные слои

Совет

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

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

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

Выведите архитектуру слоя

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

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

Выведите шаблоны слоя

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

Классификация Выходной шаблон слоя

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

classdef myClassificationLayer < nnet.layer.ClassificationLayer
        
    properties
        % (Optional) Layer properties.

        % Layer properties go here.
    end
 
    methods
        function layer = myClassificationLayer()           
            % (Optional) Create a myClassificationLayer.

            % Layer constructor function goes here.
        end

        function loss = forwardLoss(layer, Y, T)
            % Return the loss between the predictions Y and the training 
            % targets T.
            %
            % Inputs:
            %         layer - Output layer
            %         Y     – Predictions made by network
            %         T     – Training targets
            %
            % Output:
            %         loss  - Loss between Y and T

            % Layer forward loss function goes here.
        end
        
        function dLdY = backwardLoss(layer, Y, T)
            % (Optional) Backward propagate the derivative of the loss 
            % function.
            %
            % Inputs:
            %         layer - Output layer
            %         Y     – Predictions made by network
            %         T     – Training targets
            %
            % Output:
            %         dLdY  - Derivative of the loss with respect to the 
            %                 predictions Y

            % Layer backward loss function goes here.
        end
    end
end

Регрессия Выходной шаблон слоя

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

classdef myRegressionLayer < nnet.layer.RegressionLayer
        
    properties
        % (Optional) Layer properties.

        % Layer properties go here.
    end
 
    methods
        function layer = myRegressionLayer()           
            % (Optional) Create a myRegressionLayer.

            % Layer constructor function goes here.
        end

        function loss = forwardLoss(layer, Y, T)
            % Return the loss between the predictions Y and the training
            % targets T.
            %
            % Inputs:
            %         layer - Output layer
            %         Y     – Predictions made by network
            %         T     – Training targets
            %
            % Output:
            %         loss  - Loss between Y and T

            % Layer forward loss function goes here.
        end
        
        function dLdY = backwardLoss(layer, Y, T)
            % (Optional) Backward propagate the derivative of the loss 
            % function.
            %
            % Inputs:
            %         layer - Output layer
            %         Y     – Predictions made by network
            %         T     – Training targets
            %
            % Output:
            %         dLdY  - Derivative of the loss with respect to the 
            %                 predictions Y        

            % Layer backward loss function goes here.
        end
    end
end

Выведите свойства слоя

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

По умолчанию пользовательские выходные слои имеют следующие свойства:

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

  • Description – Однострочное описание слоя в виде вектора символов или строкового скаляра. Это описание появляется, когда слой отображен в Layer массив. Если вы не задаете описание слоя, то программное обеспечение отображает "Classification Output" или "Regression Output".

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

Пользовательские слои классификации также имеют следующее свойство:

  • ClassesКлассы выходного слоя в виде категориального вектора, массива строк, массива ячеек из символьных векторов или 'auto'. Если Classes 'auto', затем программное обеспечение автоматически устанавливает классы в учебное время. Если вы задаете массив строк или массив ячеек из символьных векторов str, затем программное обеспечение устанавливает классы выходного слоя к categorical(str,str).

Пользовательские слои регрессии также имеют следующее свойство:

  • ResponseNamesИмена ответов, заданных массив ячеек из символьных векторов или массив строк. В учебное время программное обеспечение автоматически определяет имена ответа согласно обучающим данным. Значением по умолчанию является {}.

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

Передайте функцию потерь

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

Синтаксис для forwardLoss loss = forwardLoss(layer,Y,T). Вход Y соответствует предсказаниям, сделанным сетью. Этими предсказаниями является выход предыдущего слоя. Вход T соответствует учебным целям. Выход loss потеря между Y и T согласно заданной функции потерь. Выход loss должен быть скаляр.

Обратная функция потерь

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

Синтаксис для backwardLoss dLdY = backwardLoss(layer,Y,T). Вход Y содержит предсказания, сделанные сетью и T содержит учебные цели. Выход dLdY производная потери относительно предсказаний Y. Выход dLdY должен быть одного размера с входом Y слоя.

Для проблем классификации, размерностей T зависьте от типа проблемы.

Задача классификацииВведите размерРазмерность наблюдения
2D классификация изображений1 1 K N, где K является количеством классов и N, количество наблюдений.4
3-D классификация изображений1 1 1 K N, где K является количеством классов и N, количество наблюдений.5
Классификация последовательностей к меткеK-by-N, где K является количеством классов и N, является количеством наблюдений.2
Классификация от последовательности к последовательностиK-by-N-by-S, где K является количеством классов, N, является количеством наблюдений, и S является длиной последовательности.2

Размер Y зависит от выхода предыдущего слоя. Гарантировать тот Y одного размера с T, необходимо включать слой, который выводит правильный размер перед выходным слоем. Например, чтобы гарантировать тот Y 4-D массив музыки предсказания к классам K, можно включать полносвязный слой размера K, сопровождаемый softmax слоем перед выходным слоем.

Для проблем регрессии, размерностей T также зависьте от типа проблемы.

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

Например, если сеть задает сеть регрессии изображений с одним ответом и имеет мини-пакеты размера 50, то T 4-D массив размера 1 1 1 50.

Размер Y зависит от выхода предыдущего слоя. Гарантировать тот Y одного размера с T, необходимо включать слой, который выводит правильный размер перед выходным слоем. Например, для регрессии изображений с ответами R, чтобы гарантировать тот Y 4-D массив правильного размера, можно включать полносвязный слой размера R перед выходным слоем.

forwardLoss и backwardLoss функции имеют следующие выходные аргументы.

ФункцияВыходной аргументОписание
forwardLosslossРасчетная потеря между предсказаниями Y и истинный целевой T.
backwardLossdLdYПроизводная потери относительно предсказаний Y.

backwardLoss должен вывести dLdY с размером, ожидаемым предыдущим слоем и dLdY быть одного размера с Y.

Совместимость с 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. Для больших входных размеров проверки градиента занимают больше времени, чтобы запуститься. Чтобы ускорить тесты, задайте меньший допустимый входной размер.

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

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

| | | |

Похожие темы