Совет
В этом разделе объясняется, как определить пользовательские уровни глубокого обучения для ваших проблем. Список встроенных слоев в Toolbox™ глубокого обучения см. в разделе Список слоев глубокого обучения.
В этом разделе описывается архитектура слоев глубокого обучения и способы определения пользовательских слоев, используемых для решения проблем.
| Напечатать | Описание |
|---|---|
| Слой | Определите пользовательский уровень глубокого обучения и укажите дополнительные обучаемые параметры. Пример определения пользовательского слоя с обучаемыми параметрами см. в разделе Определение пользовательского слоя глубокого обучения с обучаемыми параметрами. Пример определения пользовательского слоя с несколькими входами см. в разделе Определение пользовательского слоя глубокого обучения с несколькими входами. |
| Уровень вывода классификации | Определите пользовательский выходной слой классификации и укажите функцию потерь. Пример определения пользовательского выходного слоя классификации и функции потери см. в разделе Определение пользовательского выходного слоя классификации. |
| Выходной уровень регрессии | Определите пользовательский выходной слой регрессии и укажите функцию потерь. Пример определения пользовательского выходного слоя регрессии и определения функции потери см. в разделе Определение пользовательского выходного слоя регрессии. |
Для определения новых слоев можно использовать следующие шаблоны.
Во время обучения программное обеспечение итеративно выполняет передачу вперед и назад через сеть.
При выполнении прямого прохода через сеть каждый уровень принимает выходы предыдущих уровней, применяет функцию, а затем выводит (распространяет) результаты на следующие уровни.
Слои могут иметь несколько входов или выходов. Например, слой может принимать X1,..., Xn из нескольких предыдущих уровней и распространять выходные сигналы Z1,..., Zm на следующие уровни.
В конце прямого прохода сети выходной уровень вычисляет потери L между предсказаниями Y и истинными целями T.
Во время обратного прохода сети каждый уровень принимает производные потерь относительно выходов уровня, вычисляет производные потерь L относительно входов и затем обратно распространяет результаты. Если уровень имеет обучаемые параметры, то он также вычисляет производные весов уровня (обучаемые параметры). Слой использует производные весов для обновления обучаемых параметров.
Следующий рисунок описывает поток данных через глубокую нейронную сеть и выделяет поток данных через уровень с одним входом X, одним выходом Z и обучаемым параметром W.

Объявление свойств слоя в properties раздел определения класса.
По умолчанию эти свойства имеют пользовательские промежуточные слои.
| Собственность | Описание |
|---|---|
Name | Имя слоя, указанное как символьный вектор или строковый скаляр. Чтобы включить слой в график слоев, необходимо указать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с уровнем и Name имеет значение ''затем программа автоматически присваивает имя слою во время обучения. |
Description | Однострочное описание слоя, определяемое как символьный вектор или строковый скаляр. Это описание появляется, когда слой отображается в |
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 функция гарантирует, что программное обеспечение использует правильные операции уровня для обучения.
Размеры входов зависят от типа данных и выхода соединенных слоев:
| Ввод слоев | Размер ввода | Измерение наблюдения |
|---|---|---|
| 2-D изображения | h-by-w-c-by-N, где h, w и c соответствуют высоте, ширине и количеству каналов изображений соответственно, а N - количество наблюдений. | 4 |
| 3-D изображения | h-by-w-d-by-c-by-N, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов 3-D изображений соответственно, а N - количество наблюдений. | 5 |
| Векторные последовательности | c-by-N-by-S, где c - число признаков последовательностей, N - число наблюдений, а S - длина последовательности. | 2 |
| 2-D последовательности изображений | h-by-w-c-by-N-by-S, где h, w и c соответствуют высоте, ширине и количеству каналов изображений, соответственно, N - количество наблюдений, а S - длина последовательности. | 4 |
| 3-D последовательности изображений | h-by-w-d-by-c-by-N-by-S, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов 3-D изображений, соответственно, N - количество наблюдений, а S - длина последовательности. | 5 |
Для слоев, выводящих последовательности, слои могут выводить последовательности любой длины или выходные данные без измерения времени. Обратите внимание, что при обучении сеть, которая выводит последовательности с использованием trainNetwork , длины входных и выходных последовательностей должны совпадать.
Функция обратного слоя вычисляет производные потерь относительно входных данных, а затем выводит результаты (распространяется назад) на предыдущий уровень. Если уровень имеет обучаемые параметры (например, веса слоев), то backward также вычисляет производные от обучаемых параметров. При использовании trainNetwork , уровень автоматически обновляет обучаемые параметры, используя эти производные во время обратного прохода.
Определение обратной функции является необязательным. Если функция обратного направления не указана, и функции прямого уровня поддерживают dlarray объекты, то программное обеспечение автоматически определяет обратную функцию с помощью автоматического дифференцирования. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray. Определите пользовательскую обратную функцию, если необходимо:
Используйте определенный алгоритм для вычисления производных.
Использовать операции в функциях пересылки, которые не поддерживают dlarray объекты.
Пользовательские слои с возможностью изучения 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 - выходной сигнал памяти 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соответственно.
Для вычисления производных потерь можно использовать правило цепочки:
(i)
При использовании trainNetwork функция, слой автоматически обновляет обучаемые параметры с помощью производных dLdW1,…,dLdWk во время обратного прохода.
Пример определения пользовательской обратной функции см. в разделе Задание пользовательской обратной функции слоя.
Если функции прямого уровня полностью поддерживают dlarray объекты, то слой совместим с GPU. В противном случае, чтобы быть совместимым с GPU, функции уровня должны поддерживать входы и обратные выходы типа gpuArray(Панель инструментов параллельных вычислений).
Поддержка многих встроенных функций MATLAB ® gpuArray(Панель инструментов параллельных вычислений) и dlarray входные аргументы. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray. Список функций, выполняемых на графическом процессоре, см. в разделе Выполнение функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений). Чтобы использовать графический процессор для глубокого обучения, необходимо также иметь поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Дополнительные сведения о работе с графическими процессорами в MATLAB см. в разделе Вычисления графического процессора в MATLAB (Parallel Computing Toolbox).
Чтобы создать пользовательский слой, поддерживающий создание кода, выполните следующие действия.
Слой должен указывать прагматику %#codegen в определении слоя.
Входы predict должно быть:
Согласовано в измерении. Каждый вход должен иметь одинаковое количество размеров.
Согласован по размеру партии. Каждый ввод должен иметь одинаковый размер партии.
Выходные данные predict должен быть согласован по размеру и размеру партии с входными данными слоя.
Нескалярные свойства должны иметь однотипный, двойной или символьный массив.
Скалярные свойства должны иметь тип numeric, logical или string.
Генерация кода поддерживает промежуточные слои только с 2-D вводом изображения.
Пример создания пользовательского слоя, поддерживающего создание кода, см. в разделе Определение пользовательского слоя глубокого обучения для создания кода.
Чтобы создать пользовательский слой, который сам определяет график слоев, можно указать dlnetwork объект как обучаемый параметр. Этот способ известен как сетчатая композиция. Состав сетевого графика можно использовать для:
Создайте один пользовательский слой, представляющий блок обучаемых слоев, например остаточный блок.
Создайте сеть с потоком управления, например, сеть с секцией, которая может динамически изменяться в зависимости от входных данных.
Создайте сеть с контурами, например сеть с секциями, которые возвращают выходные данные в себя.
При создании пользовательского слоя глубокого обучения можно использовать checkLayer для проверки допустимости слоя. Функция проверяет уровни на достоверность, совместимость графического процессора, правильно определенные градиенты и совместимость генерации кода. Для проверки допустимости слоя выполните следующую команду:
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.
Здесь функция не обнаруживает никаких проблем с уровнем.
Пользовательский слой можно использовать так же, как и любой другой слой в инструментарии глубокого обучения.
Определите пользовательский слой 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 зависит от типа проблемы.
| Задача классификации | Размер ввода | Измерение наблюдения |
|---|---|---|
| 2-D классификация изображений | 1-by-1-by-K-by-N, где K - число классов, а N - число наблюдений. | 4 |
| 3-D классификация изображений | 1-by-1-by-1-by-K-by-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 также зависит от типа проблемы.
| Задача регрессии | Размер ввода | Измерение наблюдения |
|---|---|---|
| 2-D регрессия изображения | 1-by-1-by-R-by-N, где R - количество ответов, а N - количество наблюдений. | 4 |
| 2-D Регрессия между изображениями | h-by-w-by-c-by-N, где h, w и c - высота, ширина и количество каналов выхода соответственно, а N - количество наблюдений. | 4 |
| 3-D регрессия изображения | 1-by-1-by-1-by-R-by-N, где R - количество ответов, а N - количество наблюдений. | 5 |
| 3-D Регрессия между изображениями | h-by-w-by-d-by-c-by-N, где h, w, d и c - высота, ширина, глубина и количество каналов выхода соответственно, а N - количество наблюдений. | 5 |
| Регрессия «последовательность к одному» | R-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 имеют следующие выходные аргументы.
| Функция | Выходной аргумент | Описание |
|---|---|---|
forwardLoss | loss | Вычисленные потери между прогнозами Y и истинная цель T. |
backwardLoss | dLdY | Производная от убытка относительно прогнозов Y. |
backwardLoss должен выводиться dLdY с размером, ожидаемым предыдущим слоем и dLdY должен быть того же размера, что и Y.
Если функции прямого уровня полностью поддерживают dlarray объекты, то слой совместим с GPU. В противном случае, чтобы быть совместимым с GPU, функции уровня должны поддерживать входы и обратные выходы типа gpuArray(Панель инструментов параллельных вычислений).
Поддержка многих встроенных функций MATLAB gpuArray(Панель инструментов параллельных вычислений) и dlarray входные аргументы. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray. Список функций, выполняемых на графическом процессоре, см. в разделе Выполнение функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений). Чтобы использовать графический процессор для глубокого обучения, необходимо также иметь поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Дополнительные сведения о работе с графическими процессорами в MATLAB см. в разделе Вычисления графического процессора в MATLAB (Parallel Computing 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
assembleNetwork | checkLayer | getL2Factor | getLearnRateFactor | setL2Factor | setLearnRateFactor