Если Deep Learning Toolbox™ не обеспечивает слой, вы требуете для своей классификации или проблемы регрессии, то можно задать собственный слой. Для списка встроенных слоев смотрите Список слоев глубокого обучения.
Пример Задает Пользовательский Взвешенный Слой Классификации, показывает, как задать и создать пользовательскую взвешенную классификацию выходной слой со взвешенной потерей перекрестной энтропии и проходит следующие шаги:
Назовите слой – Дают слою имя, таким образом, это может использоваться в MATLAB®.
Объявите, что свойства слоя – Задают свойства слоя.
Создайте (дополнительную) функцию конструктора – Задают, как создать слой и инициализировать его свойства. Если вы не задаете функцию конструктора, то программное обеспечение инициализирует свойства ''
при создании.
Создайте прямую функцию потерь – Задают потерю между предсказаниями и учебными целями.
Создайте обратную (дополнительную) функцию потерь – Задают производную потери относительно предсказаний. Если вы не задаете обратную функцию потерь, то прямая функция потерь должна поддержать dlarray
объекты.
Создание обратной функции потерь является дополнительным. Если прямая функция потерь только использует функции та поддержка dlarray
объекты, затем программное обеспечение определяет производные автоматически с помощью автоматического дифференцирования. Для списка функций та поддержка dlarray
объекты, см. Список Функций с Поддержкой dlarray. Если вы хотите использовать функции, которые не поддерживают dlarray
объекты, или хотят использовать определенный алгоритм в обратной функции потерь, затем можно задать пользовательскую обратную функцию с помощью этого примера в качестве руководства.
Пример Задает Пользовательский Взвешенный Слой Классификации, показывает, как создать взвешенный слой классификации.
Взвешенный слой классификации вычисляет взвешенную потерю перекрестной энтропии для проблем классификации. Взвешенная перекрестная энтропия является ошибочной мерой между двумя непрерывными случайными переменными. Для баллов предсказания Y и обучение предназначаются для T, взвешенной потерей перекрестной энтропии между Y и T дают
где N является количеством наблюдений, K является количеством классов, и w является вектором весов для каждого класса.
Представление слой, созданный в примере, Задает Пользовательский Взвешенный Слой Классификации. Этот слой не имеет backwardLoss
функция.
classdef weightedClassificationLayer < nnet.layer.ClassificationLayer properties % Vector of weights corresponding to the classes in the training % data ClassWeights end methods function layer = weightedClassificationLayer(classWeights, name) % layer = weightedClassificationLayer(classWeights) creates a % weighted cross entropy loss layer. classWeights is a row % vector of weights corresponding to the classes in the order % that they appear in the training data. % % layer = weightedClassificationLayer(classWeights, name) % additionally specifies the layer name. % Set class weights layer.ClassWeights = classWeights; % Set layer name if nargin == 2 layer.Name = name; end % Set layer description layer.Description = 'Weighted cross entropy'; end function loss = forwardLoss(layer, Y, T) % loss = forwardLoss(layer, Y, T) returns the weighted cross % entropy loss between the predictions Y and the training % targets T. N = size(Y,4); Y = squeeze(Y); T = squeeze(T); W = layer.ClassWeights; loss = -sum(W*(T.*log(Y)))/N; end end end
Реализуйте backwardLoss
функция, которая возвращает производные потери относительно входных данных и настраиваемых параметров.
Синтаксис для backwardLoss
dLdY = backwardLoss(layer, Y, T)
. Вход Y
содержит предсказания, сделанные сетью и T
содержит учебные цели. Выход dLdY
производная потери относительно предсказаний Y
. Выход dLdY
должен быть одного размера с входом Y
слоя.
Размерности Y
и T
совпадают с входными параметрами в forwardLoss
.
Производной взвешенной потери перекрестной энтропии относительно предсказаний Y дают
где N является количеством наблюдений, и w является вектором весов для каждого класса.
Создайте обратную функцию потерь, которая возвращает эти производные.
function dLdY = backwardLoss(layer, Y, T)
% dLdY = backwardLoss(layer, Y, T) returns the derivatives of
% the weighted cross entropy loss with respect to the
% predictions Y.
[~,~,K,N] = size(Y);
Y = squeeze(Y);
T = squeeze(T);
W = layer.ClassWeights;
dLdY = -(W'.*T./Y)/N;
dLdY = reshape(dLdY,[1 1 K N]);
end
Просмотрите завершенный файл класса слоя.
classdef weightedClassificationLayer < nnet.layer.ClassificationLayer properties % Vector of weights corresponding to the classes in the training % data ClassWeights end methods function layer = weightedClassificationLayer(classWeights, name) % layer = weightedClassificationLayer(classWeights) creates a % weighted cross entropy loss layer. classWeights is a row % vector of weights corresponding to the classes in the order % that they appear in the training data. % % layer = weightedClassificationLayer(classWeights, name) % additionally specifies the layer name. % Set class weights layer.ClassWeights = classWeights; % Set layer name if nargin == 2 layer.Name = name; end % Set layer description layer.Description = 'Weighted cross entropy'; end function loss = forwardLoss(layer, Y, T) % loss = forwardLoss(layer, Y, T) returns the weighted cross % entropy loss between the predictions Y and the training % targets T. N = size(Y,4); Y = squeeze(Y); T = squeeze(T); W = layer.ClassWeights; loss = -sum(W*(T.*log(Y)))/N; end function dLdY = backwardLoss(layer, Y, T) % dLdY = backwardLoss(layer, Y, T) returns the derivatives of % the weighted cross entropy loss with respect to the % predictions Y. [~,~,K,N] = size(Y); Y = squeeze(Y); T = squeeze(T); W = layer.ClassWeights; dLdY = -(W'.*T./Y)/N; dLdY = reshape(dLdY,[1 1 K N]); end end end
Если слой вперед функции полностью поддерживает dlarray
объекты, затем слоем является совместимый графический процессор. В противном случае, чтобы быть совместимым графическим процессором, функции слоя должны поддержать входные параметры и возвратить выходные параметры типа gpuArray
.
Много встроенных функций MATLAB поддерживают gpuArray
и dlarray
входные параметры. Для списка функций та поддержка dlarray
объекты, см. Список Функций с Поддержкой dlarray. Для списка функций, которые выполняются на графическом процессоре, смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox). Чтобы использовать графический процессор в глубоком обучении, у вас должен также быть CUDA®, включенный NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше. Для получения дополнительной информации о работе с графическими процессорами в MATLAB смотрите, что графический процессор Вычисляет в MATLAB (Parallel Computing Toolbox).