Задайте пользовательский Выходной слой обратная функция потерь

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

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

  1. Назовите слой – Дают слою имя, таким образом, это может использоваться в MATLAB®.

  2. Объявите, что свойства слоя – Задают свойства слоя.

  3. Создайте (дополнительную) функцию конструктора – Задают, как создать слой и инициализировать его свойства. Если вы не задаете функцию конструктора, то программное обеспечение инициализирует свойства '' при создании.

  4. Создайте прямую функцию потерь – Задают потерю между предсказаниями и учебными целями.

  5. Создайте обратную (дополнительную) функцию потерь – Задают производную потери относительно предсказаний. Если вы не задаете обратную функцию потерь, то прямая функция потерь должна поддержать dlarray объекты.

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

Создайте пользовательский слой

Пример Задает Пользовательскую Классификацию, которую показывает Выходной Слой, как создать слой классификации SSE.

Слой SSE классификации вычисляет ошибочную потерю суммы квадратов для проблем классификации. SSE является ошибочной мерой между двумя непрерывными случайными переменными. Для предсказаний Y и обучение предназначаются для T, потерей SSE между Y и T дают

L=1Nn=1Ni=1K(YniTni)2,

где N является количеством наблюдений, и K является количеством классов.

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

classdef sseClassificationLayer < nnet.layer.ClassificationLayer
    % Example custom classification layer with sum of squares error loss.
    
    methods
        function layer = sseClassificationLayer(name)
            % layer = sseClassificationLayer(name) creates a sum of squares
            % error classification layer and specifies the layer name.
    
            % Set layer name.
            layer.Name = name;

            % Set layer description.
            layer.Description = 'Sum of squares error';
        end
        
        function loss = forwardLoss(layer, Y, T)
            % loss = forwardLoss(layer, Y, T) returns the SSE loss between
            % the predictions Y and the training targets T.

            % Calculate sum of squares.
            sumSquares = sum((Y-T).^2);
    
            % Take mean over mini-batch.
            N = size(Y,4);
            loss = sum(sumSquares)/N;
        end
    end
end

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

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

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

Размерности Y и T совпадают с входными параметрами в forwardLoss.

Производной потери SSE относительно предсказаний Y дают

δLδYi=2N(YiTi),

где N является количеством наблюдений во входе.

Создайте обратную функцию потерь, которая возвращает эти производные.

        function dLdY = backwardLoss(layer, Y, T)
            % dLdY = backwardLoss(layer, Y, T) returns the derivatives of
            % the SSE loss with respect to the predictions Y.
            
            N = size(Y,4);
            dLdY = 2*(Y-T)/N;
        end

Полный слой

Просмотрите завершенный файл класса слоя.

classdef sseClassificationLayer < nnet.layer.ClassificationLayer
    % Example custom classification layer with sum of squares error loss.
    
    methods
        function layer = sseClassificationLayer(name)
            % layer = sseClassificationLayer(name) creates a sum of squares
            % error classification layer and specifies the layer name.
    
            % Set layer name.
            layer.Name = name;

            % Set layer description.
            layer.Description = 'Sum of squares error';
        end
        
        function loss = forwardLoss(layer, Y, T)
            % loss = forwardLoss(layer, Y, T) returns the SSE loss between
            % the predictions Y and the training targets T.

            % Calculate sum of squares.
            sumSquares = sum((Y-T).^2);
    
            % Take mean over mini-batch.
            N = size(Y,4);
            loss = sum(sumSquares)/N;
        end

        function dLdY = backwardLoss(layer, Y, T)
            % dLdY = backwardLoss(layer, Y, T) returns the derivatives of
            % the SSE loss with respect to the predictions Y.
            
            N = size(Y,4);
            dLdY = 2*(Y-T)/N;
        end
    end
end

Совместимость с 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).

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

|

Похожие темы