Если Deep Learning Toolbox™ не предоставляет слой, необходимый для классификации или регрессии, можно определить собственный пользовательский слой. Список встроенных слоев см. в разделе Список слоев глубокого обучения.
В примере Определение выходного слоя пользовательской классификации (Define Custom Classification Output Layer) показано, как определить и создать выходной слой пользовательской классификации с потерей суммы ошибок квадратов (SSE), и выполняются следующие шаги.
Имя слоя - присвойте слою имя, чтобы он мог использоваться в MATLAB ®.
Объявить свойства слоя - укажите свойства слоя.
Создать функцию конструктора (необязательно) - укажите способ построения слоя и инициализации его свойств. Если функция конструктора не указана, то программа инициализирует свойства с помощью '' при создании.
Создать функцию прямых потерь - укажите потери между прогнозами и целями обучения.
Создать обратную функцию потерь (необязательно) - укажите производную потерь относительно прогнозов. Если функция потерь в обратном направлении не указана, то функция потерь в прямом направлении должна поддерживать dlarray объекты.
Создание функции обратной потери является необязательным. Если функция прямых потерь использует только те функции, которые поддерживают dlarray объекты, то программное обеспечение определяет производные автоматически с помощью автоматического дифференцирования. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray. Если вы хотите использовать функции, которые не поддерживают dlarray объекты или требуется использовать определенный алгоритм для функции обратной потери, то можно определить пользовательскую функцию обратной передачи, используя этот пример в качестве руководства.
В примере «Определение выходного слоя пользовательской классификации» показано, как создать слой классификации SSE.
Уровень SSE классификации вычисляет сумму потерь ошибок квадратов для проблем классификации. SSE - мера ошибки между двумя непрерывными случайными переменными. Для прогнозов Y и учебных целей T потеря МРЗ между Y и T задается
) 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.
Производная потери МРЗ относительно предсказаний Y задается
Ti),
где 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
Если функции прямого уровня полностью поддерживают dlarray объекты, то слой совместим с GPU. В противном случае, чтобы быть совместимым с GPU, функции уровня должны поддерживать входы и обратные выходы типа gpuArray(Панель инструментов параллельных вычислений).
Поддержка многих встроенных функций MATLAB gpuArray(Панель инструментов параллельных вычислений) и dlarray входные аргументы. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray. Список функций, выполняемых на графическом процессоре, см. в разделе Выполнение функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений). Чтобы использовать графический процессор для глубокого обучения, необходимо также иметь поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Дополнительные сведения о работе с графическими процессорами в MATLAB см. в разделе Вычисления графического процессора в MATLAB (Parallel Computing Toolbox).