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

Совет

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

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

ВводОписание
Слой

Задайте пользовательский слой глубокого обучения и задайте дополнительные настраиваемые параметры.

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

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

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

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

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

Задайте пользовательскую регрессию выходной слой и задайте функцию потерь.

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

Шаблоны слоя

Можно использовать следующие шаблоны, чтобы задать новые слои.

 Промежуточный шаблон слоя

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

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

Промежуточная архитектура слоя

Во время обучения программное обеспечение итеративно выполняет вперед и обратные проходы через сеть.

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

Слои могут иметь несколько вводов или выводов. Например, слой может взять X1, …, Xn от нескольких предыдущих слоев и вперед распространить выходные параметры Z1, …, Z m к следующим слоям.

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

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

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

Промежуточные свойства слоя

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

По умолчанию пользовательские промежуточные слои имеют эти свойства.

СвойствоОписание
NameИмя слоя в виде вектора символов или строкового скаляра. Чтобы включать слой в график слоев, необходимо задать непустое, уникальное имя слоя. Если вы обучаете серийную сеть со слоем и Name установлен в '', затем программное обеспечение автоматически присваивает имя к слою в учебное время.
Description

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

TypeТип слоя в виде вектора символов или строкового скаляра. Значение Type появляется, когда слой отображен в Layer массив. Если вы не задаете тип слоя, то программное обеспечение отображает имя класса слоя.
NumInputsКоличество входных параметров слоя в виде положительного целого числа. Если вы не задаете это значение, то программное обеспечение автоматически устанавливает NumInputs к количеству имен в InputNames. Значение по умолчанию равняется 1.
InputNamesВведите имена слоя в виде массива ячеек из символьных векторов. Если вы не задаете это значение и NumInputs больше 1, затем программное обеспечение автоматически устанавливает InputNames к {'in1',...,'inN'}, где N равно NumInputs. Значением по умолчанию является {'in'}.
NumOutputsКоличество выходных параметров слоя в виде положительного целого числа. Если вы не задаете это значение, то программное обеспечение автоматически устанавливает NumOutputs к количеству имен в OutputNames. Значение по умолчанию равняется 1.
OutputNamesВыведите имена слоя в виде массива ячеек из символьных векторов. Если вы не задаете это значение и NumOutputs больше 1, затем программное обеспечение автоматически устанавливает OutputNames к {'out1',...,'outM'}, где M равно NumOutputs. Значением по умолчанию является {'out'}.

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

Совет

Если вы создаете слой с несколькими входными параметрами, то необходимо установить любого NumInputs или InputNames свойства в конструкторе слоя. Если вы создаете слой с несколькими выходными параметрами, то необходимо установить любого NumOutputs или OutputNames свойства в конструкторе слоя. Для примера смотрите, Задают Пользовательский Слой Глубокого обучения с Несколькими Входными параметрами.

Настраиваемые параметры

Объявите настраиваемые параметры слоя в properties (Learnable) раздел определения класса. Можно задать числовые массивы или dlnetwork объекты как настраиваемые параметры. Если слой не имеет никаких настраиваемых параметров, то можно не использовать properties (Learnable) раздел.

Опционально, можно задать фактор скорости обучения и фактор L2 настраиваемых параметров. По умолчанию каждый настраиваемый параметр имеет свой фактор скорости обучения и факторный набор L2 к 1.

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

ФункцияОписание
setLearnRateFactorУстановитесь изучить коэффициент уровня настраиваемого параметра.
setL2FactorУстановитесь коэффициент регуляризации L2 настраиваемого параметра.
getLearnRateFactorПолучите изучить фактор уровня настраиваемого параметра.
getL2FactorПолучите фактор регуляризации L2 настраиваемого параметра.

Чтобы задать фактор скорости обучения и фактор L2 настраиваемого параметра, используйте синтаксисы layer = setLearnRateFactor(layer,'MyParameterName',value) и layer = setL2Factor(layer,parameterName,value), соответственно.

Чтобы получить значение фактора скорости обучения и фактора L2 настраиваемого параметра, используйте синтаксисы getLearnRateFactor(layer,'MyParameterName') и getL2Factor(layer,parameterName) соответственно.

Например, этот синтаксис устанавливается изучить коэффициент уровня настраиваемого параметра с именем 'Alpha' к 0.1.

layer = setLearnRateFactor(layer,'Alpha',0.1);

Передайте функции

Некоторые слои ведут себя по-другому во время обучения и во время предсказания. Например, слой уволенного выполняет уволенного только во время обучения и не оказывает влияния во время предсказания. Слой использует одну из двух функций, чтобы выполнить прямую передачу: predict или forward. Если прямая передача во время предсказания, то слой использует predict функция. Если прямая передача в учебное время, то слой использует forward функция. Если вы не требуете двух различных функций в течение времени предсказания и учебного времени, то можно не использовать forward функция. В этом случае слой использует predict в учебное время.

Если вы задаете функциональный forward и пользовательская обратная функция, затем необходимо присвоить значение аргументу memory, который можно использовать во время обратного распространения.

Синтаксис для predict [Z1,…,Zm] = predict(layer,X1,…,Xn), где X1,…,Xn n входные параметры слоя и Z1,…,Zm m слой выходные параметры. Значения n и m должен соответствовать NumInputs и NumOutputs свойства слоя.

Совет

Если количество входных параметров к predict может варьироваться, затем использовать varargin вместо X1,…,Xn. В этом случае, varargin массив ячеек входных параметров, где varargin{i} соответствует Xi. Если количество выходных параметров может варьироваться, то используйте varargout вместо Z1,…,Zm. В этом случае, varargout массив ячеек выходных параметров, где varargout{j} соответствует Zj.

Совет

Если пользовательский слой имеет dlnetwork объект для настраиваемого параметра, затем в predict функция пользовательского слоя, используйте predict функция для dlnetwork. Используя dlnetwork объект predict функция гарантирует, что программное обеспечение использует правильные операции слоя для предсказания.

Синтаксис для forward [Z1,…,Zm,memory] = forward(layer,X1,…,Xn), где X1,…,Xn n входные параметры слоя, Z1,…,Zm m слой выходные параметры и memory память о слое.

Совет

Если количество входных параметров к forward может варьироваться, затем использовать varargin вместо X1,…,Xn. В этом случае, varargin массив ячеек входных параметров, где varargin{i} соответствует Xi. Если количество выходных параметров может варьироваться, то используйте varargout вместо Z1,…,Zm. В этом случае, varargout массив ячеек выходных параметров, где varargout{j} соответствует Zj для j = 1, …, NumOutputs и varargout{NumOutputs + 1} соответствует memory.

Совет

Если пользовательский слой имеет dlnetwork объект для настраиваемого параметра, затем в forward функция пользовательского слоя, используйте forward функция dlnetwork объект. Используя dlnetwork объект forward функция гарантирует, что программное обеспечение использует правильные операции слоя для обучения.

Размерности входных параметров зависят от типа данных и выхода связанных слоев:

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

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

Обратная функция

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

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

  • Используйте определенный алгоритм, чтобы вычислить производные.

  • Используйте операции в прямых функциях, которые не поддерживают dlarray объекты.

Пользовательские слои с learnable dlnetwork объекты не поддерживают пользовательские обратные функции.

Чтобы задать пользовательскую обратную функцию, создайте функцию с именем backward.

Синтаксис для backward [dLdX1,…,dLdXn,dLdW1,…,dLdWk] = backward(layer,X1,…,Xn,Z1,…,Zm,dLdZ1,…,dLdZm,memory), где:

  • X1,…,Xn n входные параметры слоя

  • Z1,…,Zm m выходные параметры слоя передают функции

  • dLdZ1,…,dLdZm градиенты, назад распространенные от следующего слоя

  • memory выход memory forward если forward задан, в противном случае, memory [].

Для выходных параметров, dLdX1,…,dLdXn производные потери относительно входных параметров слоя и dLdW1,…,dLdWk производные потери относительно k настраиваемые параметры. Чтобы уменьшать использование памяти путем предотвращения неиспользуемых переменных, являющихся сохраненным между прямым и обратным проходом, замените соответствующие входные параметры на ~.

Совет

Если количество входных параметров к backward может варьироваться, затем использовать varargin вместо входных параметров после layer. В этом случае, varargin массив ячеек входных параметров, где varargin{i} соответствует Xi для i=1, …, NumInputs, varargin{NumInputs+j} и varargin{NumInputs+NumOutputs+j} соответствуйте Zj и dLdZj, соответственно, для j=1, …, NumOutputs, и varargin{end} соответствует memory.

Если количество выходных параметров может варьироваться, то используйте varargout вместо выходных аргументов. В этом случае, varargout массив ячеек выходных параметров, где varargout{i} соответствует dLdXi для i=1, …, NumInputs и varargout{NumInputs+t} соответствует dLdWt для t=1, …, k, где k количество настраиваемых параметров.

Значения X1,…,Xn и Z1,…,Zm эквивалентны в прямых функциях. Размерности dLdZ1,…,dLdZm совпадают с размерностями Z1,…,Zm, соответственно.

Размерности и тип данных dLdX1,…,dLdxn совпадают с размерностями и типом данных X1,…,Xn, соответственно. Размерности и типы данных dLdW1, …, dLdWk совпадают с размерностями и типами данных W1, …, Wk, соответственно.

Чтобы вычислить производные потери, можно использовать цепочечное правило:

LX(i)=jLzjzjX(i)

LWi=jLZjZjWi

При использовании trainNetwork функция, слой автоматически обновляет настраиваемые параметры с помощью производных dLdW1, …, dLdWk во время обратного прохода.

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

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

Совместимость генерации кода

Чтобы создать пользовательский слой, который поддерживает генерацию кода:

  • Слой должен задать прагму %#codegen в определении слоя.

  • Входные параметры predict должен быть:

    • Сопоставимый в размерности. Каждый вход должен иметь то же количество размерностей.

    • Сопоставимый в пакетном размере. Каждый вход должен иметь тот же пакетный размер.

  • Выходные параметры predict должно быть сопоставимым в размерности и пакетном размере с входными параметрами слоя.

  • Нескалярные свойства должны иметь один тип, дважды, или символьный массив.

  • Скалярные свойства должны иметь тип, числовой, логический, или строка.

Генерация кода поддерживает промежуточные слои с 2D входом изображений только.

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

Сетевой состав

Чтобы создать пользовательский слой, который сам задает график слоев, можно задать dlnetwork возразите как настраиваемый параметр. Этот метод известен как сетевой состав. Можно использовать сетевой состав для:

  • Создайте один пользовательский слой, который представляет блок learnable слоев, например, остаточный блок.

  • Создайте сеть с потоком управления, например, сеть с разделом, который может динамически измениться в зависимости от входных данных.

  • Создайте сеть с циклами, например, сеть с разделами, которые подают выход назад в себя.

Проверяйте валидность слоя

Если вы создаете пользовательский слой глубокого обучения, то можно использовать checkLayer функционируйте, чтобы проверять, что слой допустим. Функция проверяет, что слои для валидности, совместимости с GPU, правильно задали градиенты и совместимость генерации кода. Чтобы проверять, что слой допустим, запустите следующую команду:

checkLayer(layer,validInputSize,'ObservationDimension',dim)
где layer экземпляр слоя, validInputSize векторный массив или массив ячеек, задающий допустимые входные размеры к слою и dim задает размерность наблюдений во входных данных слоя. Для больших входных размеров проверки градиента занимают больше времени, чтобы запуститься. Чтобы ускорить тесты, задайте меньший допустимый входной размер.

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

Проверяйте валидность слоя Используя checkLayer

Проверяйте валидность слоя пользовательского слоя preluLayer.

Задайте пользовательский слой PReLU. Чтобы создать этот слой, сохраните файл preluLayer.m в текущей папке.

Создайте экземпляр слоя и проверяйте его валидность с помощью checkLayer. Задайте допустимый входной размер, чтобы быть размером одного наблюдения за типичным входом к слою. Слой ожидает 4-D входные параметры массивов, где первые три измерения соответствуют высоте, ширине и количеству каналов предыдущего слоя выход, и четвертая размерность соответствует наблюдениям.

Задайте типичный размер входа наблюдения и установите 'ObservationDimension' к 4.

layer = preluLayer(20,'prelu');
validInputSize = [24 24 20];
checkLayer(layer,validInputSize,'ObservationDimension',4)
Skipping GPU tests. No compatible GPU device found.
 
Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the 'CheckCodegenCompatibility' and 'ObservationDimension' options.
 
Running nnet.checklayer.TestLayerWithoutBackward
.......... ...
Done nnet.checklayer.TestLayerWithoutBackward
__________

Test Summary:
	 13 Passed, 0 Failed, 0 Incomplete, 9 Skipped.
	 Time elapsed: 0.15907 seconds.

Здесь, функция не обнаруживает проблем со слоем.

Включайте слой в сеть

Можно использовать пользовательский слой таким же образом в качестве любого другого слоя в Deep Learning Toolbox.

Задайте пользовательский слой PReLU. Чтобы создать этот слой, сохраните файл preluLayer.m в текущей папке.

Создайте массив слоя, который включает пользовательский слой preluLayer.

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    batchNormalizationLayer
    preluLayer(20,'prelu')
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

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

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

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

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

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

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

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

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

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

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

Задайте пользовательский средний слой регрессии абсолютной погрешности. Чтобы создать этот слой, сохраните файл maeRegressionLayer.m в текущей папке.

Загрузите обучающие данные в качестве примера.

[XTrain,~,YTrain] = digitTrain4DArrayData;

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

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(1)
    maeRegressionLayer('mae')]
layers = 
  6x1 Layer array with layers:

     1   ''      Image Input           28x28x1 images with 'zerocenter' normalization
     2   ''      Convolution           20 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
     3   ''      Batch Normalization   Batch normalization
     4   ''      ReLU                  ReLU
     5   ''      Fully Connected       1 fully connected layer
     6   'mae'   Regression Output     Mean absolute error

Установите опции обучения и обучите сеть.

options = trainingOptions('sgdm','Verbose',false);
net = trainNetwork(XTrain,YTrain,layers,options);

Оцените производительность сети путем вычисления ошибки предсказания между предсказанными и фактическими углами вращения.

[XTest,~,YTest] = digitTest4DArrayData;
YPred = predict(net,XTest);
predictionError = YTest - YPred;

Вычислите количество предсказаний в приемлемом допуске на погрешность от истинных углов. Установите порог до 10 градусов и вычислите процент предсказаний в этом пороге.

thr = 10;
numCorrect = sum(abs(predictionError) < thr);
numTestImages = size(XTest,4);
accuracy = numCorrect/numTestImages
accuracy = 0.7524

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

| | | | |

Похожие темы