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