Совет
Эта тема объясняет, как задать пользовательские слои глубокого обучения для ваших проблем. Для списка встроенных слоев в Deep Learning Toolbox™ смотрите Список слоев глубокого обучения.
Чтобы изучить, как задать пользовательские выходные слои, смотрите, Задают Пользовательское Глубокое обучение Выходные Слои.
Если Deep Learning Toolbox не обеспечивает слой, которого вы требуете для своей задачи, то можно задать собственный слой с помощью этой темы в качестве руководства. После определения пользовательского слоя можно автоматически проверять, что слой допустим, совместимый графический процессор, и выходные параметры правильно задал градиенты.
Во время обучения программное обеспечение итеративно выполняет вперед и обратные проходы через сеть.
Заставляя форварда пройти через сеть, каждый слой берет выходные параметры предыдущих слоев, применяет функцию, и затем выходные параметры (вперед распространяет), результаты к следующим слоям. Слои с сохранением информации, такие как слои LSTM, также обновляют состояние слоя.
Слои могут иметь несколько вводов или выводов. Например, слой может взять X1, …, XN от нескольких предыдущих слоев и вперед распространить выходные параметры Z1, …, Z M к последующим слоям.
В конце прямой передачи сети выходной слой вычисляет потерю L между предсказаниями Y и цели T.
Во время обратного прохода сети каждый слой берет производные потери относительно выходных параметров слоя, вычисляет производные потери L относительно входных параметров, и затем назад распространяет результаты. Если слой имеет настраиваемые параметры, то слой также вычисляет производные весов слоя (настраиваемые параметры). Слой использует производные весов, чтобы обновить настраиваемые параметры.
Следующая фигура описывает поток данных через глубокую нейронную сеть и подсвечивает поток данных через слой с одним входом X, одним выходом Z и настраиваемым параметром W.
Чтобы задать пользовательский промежуточный слой, используйте этот шаблон определения класса. Этот шаблон обрисовывает в общих чертах структуру промежуточного определения класса слоя. Это обрисовывает в общих чертах:
Дополнительный properties
блоки для свойств слоя, настраиваемых параметров и параметров состояния. Для получения дополнительной информации смотрите Промежуточные Свойства слоя.
Функция конструктора слоя.
predict
функционируйте и дополнительный forward
функция. Для получения дополнительной информации смотрите Прямые Функции.
Дополнительный resetState
функция для слоев со свойствами состояний. Для получения дополнительной информации смотрите Функцию состояния Сброса.
Дополнительный backward
функция. Для получения дополнительной информации смотрите Обратную Функцию.
classdef myLayer < nnet.layer.Layer % & nnet.layer.Formattable (Optional) properties % (Optional) Layer properties. % Declare layer properties here. end properties (Learnable) % (Optional) Layer learnable parameters. % Declare learnable parameters here. end properties (State) % (Optional) Layer state parameters. % Declare state parameters here. end properties (Learnable, State) % (Optional) Nested dlnetwork objects with both learnable % parameters and state. % Declare nested networks with learnable and state parameters here. end methods function layer = myLayer() % (Optional) Create a myLayer. % This function must have the same name as the class. % Define layer constructor function here. end function [Z,state] = predict(layer,X) % Forward input data through the layer at prediction time and % output the result and updated state. % % Inputs: % layer - Layer to forward propagate through % X - Input data % Outputs: % Z - Output of layer forward function % state - (Optional) Updated layer state. % % - For layers with multiple inputs, replace X with X1,...,XN, % where N is the number of inputs. % - For layers with multiple outputs, replace Z with % Z1,...,ZM, where M is the number of outputs. % - For layers with multiple state parameters, replace state % with state1,...,stateK, where K is the number of state % parameters. % Define layer predict function here. end function [Z,state,memory] = forward(layer,X) % (Optional) Forward input data through the layer at training % time and output the result, updated state, and a memory % value. % % Inputs: % layer - Layer to forward propagate through % X - Layer input data % Outputs: % Z - Output of layer forward function % state - (Optional) Updated layer state % memory - (Optional) Memory value for custom backward % function % % - For layers with multiple inputs, replace X with X1,...,XN, % where N is the number of inputs. % - For layers with multiple outputs, replace Z with % Z1,...,ZM, where M is the number of outputs. % - For layers with multiple state parameters, replace state % with state1,...,stateK, where K is the number of state % parameters. % Define layer forward function here. end function layer = resetState(layer) % (Optional) Reset layer state. % Define reset state function here. end function [dLdX,dLdW,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory) % (Optional) Backward propagate the derivative of the loss % function through the layer. % % Inputs: % layer - Layer to backward propagate through % X - Layer input data % Z - Layer output data % dLdZ - Derivative of loss with respect to layer % output % dLdSout - (Optional) Derivative of loss with respect % to state output % memory - Memory value from forward function % Outputs: % dLdX - Derivative of loss with respect to layer input % dLdW - (Optional) Derivative of loss with respect to % learnable parameter % dLdSin - (Optional) Derivative of loss with respect to % state input % % - For layers with state parameters, the backward syntax must % include both dLdSout and dLdSin, or neither. % - For layers with multiple inputs, replace X and dLdX with % X1,...,XN and dLdX1,...,dLdXN, respectively, where N is % the number of inputs. % - For layers with multiple outputs, replace Z and dlZ with % Z1,...,ZM and dLdZ,...,dLdZM, respectively, where M is the % number of outputs. % - For layers with multiple learnable parameters, replace % dLdW with dLdW1,...,dLdWP, where P is the number of % learnable parameters. % - For layers with multiple state parameters, replace dLdSin % and dLdSout with dLdSin1,...,dLdSinK and % dLdSout1,...dldSoutK, respectively, where K is the number % of state parameters. % Define layer backward function here. end end end
dlarray
объекты делают работу с высокими размерными данными легче, позволяя вам пометить размерности. Например, можно пометить, которому размерности соответствуют пространственный, время, канал, и обрабатывают размерности в пакетном режиме с помощью "S"
T
C
, и "B"
метки, соответственно. Для незаданных и других размерностей используйте "U"
метка. Для dlarray
возразите функциям, которые действуют по конкретным размерностям, можно задать метки размерности путем форматирования dlarray
возразите непосредственно, или при помощи DataFormat
опция.Используя отформатированный dlarray
объекты в пользовательских слоях также позволяют вам задавать слои, где вводы и выводы имеют различные форматы, такие как слои, которые переставляют, добавляют или удаляют размерности. Например, можно задать слой, который берет в качестве входа мини-пакет изображений с форматом "SSCB"
(пространственный, пространственный, канал, пакет) и выход мини-пакет последовательностей с форматом "CBT"
(образуйте канал, обработайте в пакетном режиме, время). Используя отформатированный dlarray
объекты также позволяют вам задавать слои, которые могут управлять на данных с различными форматами ввода, например, слоями, которые поддерживают входные параметры с форматами "SSCB"
(пространственный, пространственный, канал, пакет) и "CBT"
(образуйте канал, обработайте в пакетном режиме, время).
Если вы не задаете обратную функцию, то функции слоя, по умолчанию, получают, восстановил после форматирования
dlarray
объекты, как введено. Указывать, что слой получает, отформатировало
dlarray
объекты, как введено и также выходные параметры отформатировали dlarray
объекты, также наследуйтесь nnet.layer.Formattable
класс при определении пользовательского слоя.
Для примера, показывающего, как задать пользовательский слой с отформатированными входными параметрами, смотрите, Задают Пользовательский Слой Глубокого обучения с Отформатированными Входными параметрами.
Объявите свойства слоя в properties
раздел определения класса.
По умолчанию пользовательские промежуточные слои имеют эти свойства. Не объявляйте эти свойства в properties
раздел.
Свойство | Описание |
---|---|
Name | Имя слоя в виде вектора символов или строкового скаляра. Для Layer вход массивов, trainNetwork , assembleNetwork , layerGraph , и dlnetwork функции автоматически присваивают имена к слоям с Name установите на '' . |
Description | Однострочное описание слоя в виде строкового скаляра или вектора символов. Это описание появляется, когда слой отображен в Если вы не задаете описание слоя, то программное обеспечение отображает имя класса слоя. |
Type | Тип слоя в виде вектора символов или строкового скаляра. Значение Если вы не задаете тип слоя, то программное обеспечение отображает имя класса слоя. |
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
объекты как настраиваемые параметры. Если dlnetwork
объект имеет и настраиваемые параметры и параметры состояния (например, dlnetwork
объект, который содержит слой LSTM), затем необходимо задать его в properties (Learnable, State)
раздел. Если слой не имеет никаких настраиваемых параметров, то можно не использовать properties
разделы с Learnable
атрибут.
Опционально, можно задать фактор скорости обучения и фактор L2 настраиваемых параметров. По умолчанию каждый настраиваемый параметр имеет свой фактор скорости обучения и факторный набор L2 к 1
. И для встроенных и для пользовательских слоев, можно установить и получить изучить факторы уровня и факторы регуляризации L2 с помощью следующих функций.
Функция | Описание |
---|---|
setLearnRateFactor | Установитесь изучить коэффициент уровня настраиваемого параметра. |
setL2Factor | Установитесь коэффициент регуляризации L2 настраиваемого параметра. |
getLearnRateFactor | Получите изучить фактор уровня настраиваемого параметра. |
getL2Factor | Получите фактор регуляризации L2 настраиваемого параметра. |
Чтобы задать фактор скорости обучения и фактор L2 настраиваемого параметра, используйте синтаксисы layer = setLearnRateFactor(layer,parameterName,value)
и layer = setL2Factor(layer,parameterName,value)
, соответственно.
Чтобы получить значение фактора скорости обучения и фактора L2 настраиваемого параметра, используйте синтаксисы getLearnRateFactor(layer,parameterName)
и getL2Factor(layer,parameterName)
соответственно.
Например, этот синтаксис устанавливается изучить коэффициент уровня настраиваемого параметра с именем "Alpha"
к 0.1
.
layer = setLearnRateFactor(layer,"Alpha",0.1);
Для слоев с сохранением информации, таких как текущие слои, объявляют параметры состояния слоя в properties (State)
раздел определения класса. Для dlnetwork
объекты, которые имеют и настраиваемые параметры и параметры состояния (например, dlnetwork
объект, который содержит слой LSTM), затем необходимо задать его в properties (Learnable, State)
раздел. Если слой не имеет никаких параметров состояния, то можно не использовать properties
разделы с State
атрибут.
Если слой имеет параметры состояния, то прямые функции должны также возвратить обновленное состояние слоя. Для получения дополнительной информации смотрите Прямые Функции.
Чтобы задать пользовательскую функцию состояния сброса, включайте функцию с синтаксисом layer = resetState(layer)
в определении класса. Для получения дополнительной информации смотрите Функцию состояния Сброса.
Некоторые слои ведут себя по-другому во время обучения и во время предсказания. Например, слой уволенного выполняет уволенного только во время обучения и не оказывает влияния во время предсказания. Слой использует одну из двух функций, чтобы выполнить прямую передачу: predict
или forward
. Если прямая передача во время предсказания, то слой использует predict
функция. Если прямая передача в учебное время, то слой использует forward
функция. Если вы не требуете двух различных функций в течение времени предсказания и учебного времени, то можно не использовать forward
функция. В этом случае слой использует predict
в учебное время.
Если слой имеет параметры состояния, то прямые функции должны также возвратить обновленные параметры состояния слоя как числовые массивы.
Если вы задаете обоих пользовательский forward
функционируйте и пользовательский backward
функция, затем прямая функция должна возвратить memory
вывод .
predict
синтаксис функций зависит от типа слоя.
Z = predict(layer,X)
вперед входные данные X
через слой и выходные параметры результат Z
, где layer
имеет один вход, один выход.
[Z,state] = predict(layer,X)
также выводит обновленный параметр состояния state
, где layer
имеет один параметр состояния.
Можно настроить синтаксисы для слоев с несколькими входными параметрами, несколькими выходными параметрами или несколькими параметрами состояния:
Для слоев с несколькими входными параметрами замените X
с X1,...,XN
, где N
количество входных параметров. NumInputs
свойство должно совпадать с N
.
Для слоев с несколькими выходными параметрами замените Z
с Z1,...,ZM
, где M
количество выходных параметров. NumOutputs
свойство должно совпадать с M
.
Для слоев с несколькими параметрами состояния замените state
с state1,...,stateK
, где K
количество параметров состояния.
Совет
Если количество входных параметров к слою может варьироваться, то используйте varargin
вместо X1,…,XN
. В этом случае, varargin
массив ячеек входных параметров, где varargin{i}
соответствует Xi
.
Если количество выходных параметров может варьироваться, то используйте varargout
вместо Z1,…,ZN
. В этом случае, varargout
массив ячеек выходных параметров, где varargout{j}
соответствует Zj
.
Совет
Если пользовательский слой имеет dlnetwork
объект для настраиваемого параметра, затем в predict
функция пользовательского слоя, используйте predict
функция для dlnetwork
. Используя dlnetwork
объект predict
функция гарантирует, что программное обеспечение использует правильные операции слоя для предсказания.
forward
синтаксис функций зависит от типа слоя:
Z = forward(layer,X)
вперед входные данные X
через слой и выходные параметры результат Z
, где layer
имеет один вход, один выход.
[Z,state] = forward(layer,X)
также выводит обновленный параметр состояния state
, где layer
имеет один параметр состояния.
[__,memory] = forward(layer,X)
также возвращает значение памяти для пользовательского backward
функция с помощью любого из предыдущих синтаксисов. Если слой имеет обоих пользовательский forward
функционируйте и пользовательский backward
функция, затем прямая функция должна возвратить значение памяти.
Можно настроить синтаксисы для слоев с несколькими входными параметрами, несколькими выходными параметрами или несколькими параметрами состояния:
Для слоев с несколькими входными параметрами замените X
с X1,...,XN
, где N
количество входных параметров. NumInputs
свойство должно совпадать с N
.
Для слоев с несколькими выходными параметрами замените Z
с Z1,...,ZM
, где M
количество выходных параметров. NumOutputs
свойство должно совпадать с M
.
Для слоев с несколькими параметрами состояния замените state
с state1,...,stateK
, где K
количество параметров состояния.
Совет
Если количество входных параметров к слою может варьироваться, то используйте varargin
вместо X1,…,XN
. В этом случае, varargin
массив ячеек входных параметров, где varargin{i}
соответствует Xi
.
Если количество выходных параметров может варьироваться, то используйте varargout
вместо Z1,…,ZN
. В этом случае, varargout
массив ячеек выходных параметров, где varargout{j}
соответствует Zj
.
Совет
Если пользовательский слой имеет dlnetwork
объект для настраиваемого параметра, затем в forward
функция пользовательского слоя, используйте forward
функция dlnetwork
объект. Используя dlnetwork
объект forward
функция гарантирует, что программное обеспечение использует правильные операции слоя для обучения.
Размерности входных параметров зависят от типа данных и выхода связанных слоев:
Вход слоя | Введите размер | Размерность наблюдения |
---|---|---|
Характеристические векторы | c-by-N, где c соответствует количеству каналов и N, является количеством наблюдений. | 2 |
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
функция, длины последовательностей ввода и вывода должны соответствовать.
Выходные параметры пользовательского слоя прямые функции не должны быть комплексными. Если predict
или forward
функции вашего пользовательского слоя включают комплексные числа, преобразуют все выходные параметры в вещественные значения прежде, чем возвратить их. Используя комплексные числа в predict
или forward
функции вашего пользовательского слоя могут вести, чтобы объединить настраиваемые параметры. Если вы используете автоматическое дифференцирование (другими словами, вы не пишете, обратная функция для вашего пользовательского слоя) затем преобразуют все настраиваемые параметры в вещественные значения в начале функционального расчета. Выполнение так гарантирует, что выходные параметры автоматически сгенерированных обратных функций не являются комплексными.
Когда DAGNetwork
или SeriesNetwork
объекты содержат слои с параметрами состояния, можно сделать предсказания и обновить состояния слоя с помощью predictAndUpdateState
и classifyAndUpdateState
функции. Можно сбросить сетевое состояние с помощью resetState
функция.
resetState
функция для DAGNetwork
, SeriesNetwork
, и dlnetwork
объекты, по умолчанию, не оказывают влияния на пользовательские слои с параметрами состояния. Задавать поведение слоя для resetState
функция для сетевых объектов, задайте дополнительный слой resetState
функция в определении слоя, которое сбрасывает параметры состояния.
resetState
функция должна иметь синтаксис layer = resetState(layer)
, где возвращенному слою сбрасывали свойства состояний.
Обратная функция слоя вычисляет производные потери относительно входных данных, и затем выходные параметры (назад распространяет), результаты к предыдущему слою. Если слой имеет настраиваемые параметры (например, веса слоя), то backward
также вычисляет производные настраиваемых параметров. При использовании trainNetwork
функция, слой автоматически обновляет настраиваемые параметры с помощью этих производных во время обратного прохода.
Определение обратной функции является дополнительным. Если вы не задаете обратную функцию и слой вперед, функции поддерживают dlarray
объекты, затем программное обеспечение автоматически определяет обратную функцию с помощью автоматического дифференцирования. Для списка функций та поддержка dlarray
объекты, см. Список Функций с Поддержкой dlarray. Задайте пользовательскую обратную функцию, когда это необходимо, к:
Используйте определенный алгоритм, чтобы вычислить производные.
Используйте операции в прямых функциях, которые не поддерживают dlarray
объекты.
Пользовательские слои с learnable dlnetwork
объекты не поддерживают пользовательские обратные функции.
Чтобы задать пользовательскую обратную функцию, создайте функцию с именем backward
.
backward
синтаксис функций зависит от типа слоя.
dLdX = backward(layer,X,Z,dLdZ,memory)
возвращает производные dLdX
из потери относительно входа слоя, где layer
имеет один вход и один выход. Z
соответствует прямому функциональному выходу и dLdZ
соответствует производной потери относительно Z
. Входной параметр функции memory
соответствует выходу memory прямой функции.
[dLdX,dLdW] = backward(layer,X,Z,dLdZ,memory)
также возвращает производный dLdW
из потери относительно настраиваемого параметра, где layer
имеет один настраиваемый параметр.
[dLdX,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory)
также возвращает производный dLdSin
из потери относительно входа состояния с помощью любого из предыдущих синтаксисов, где layer
имеет один параметр состояния и dLdSout
соответствует производной потери относительно состояния слоя выход.
[dLdX,dLdW,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory)
также возвращает производный dLdW
из потери относительно настраиваемого параметра и возвращает производный dLdSin
из потери относительно входа состояния слоя с помощью любого из предыдущих синтаксисов, где layer
имеет один параметр состояния и один настраиваемый параметр.
Можно настроить синтаксисы для слоев с несколькими входными параметрами, несколькими выходными параметрами, несколькими настраиваемыми параметрами или несколькими параметрами состояния:
Для слоев с несколькими входными параметрами замените X
и dLdX
с X1,...,XN
и dLdX1,...,dLdXN
, соответственно, где N
количество входных параметров.
Для слоев с несколькими выходными параметрами замените Z
и dLdZ
с Z1,...,ZM
и dLdZ1,...,dLdZM
, соответственно, где M
количество выходных параметров.
Для слоев с несколькими настраиваемыми параметрами замените dLdW
с dLdW1,...,dLdWP
, где P
количество настраиваемых параметров.
Для слоев с несколькими параметрами состояния замените dLdSin
и dLdSout
с dLdSin1,...,dLdSinK
и dLdSout1,...,dLdSoutK
, соответственно, где K
количество параметров состояния.
Чтобы уменьшать использование памяти путем предотвращения неиспользуемых переменных, являющихся сохраненным между прямым и обратным проходом, замените соответствующие входные параметры на ~
.
Совет
Если количество входных параметров к backward
может варьироваться, затем использовать varargin
вместо входных параметров после layer
. В этом случае, varargin
массив ячеек входных параметров, где первый N
элементы соответствуют N
входные параметры слоя, следующий M
элементы соответствуют M
слой выходные параметры, следующий M
элементы соответствуют производным потери относительно M
слой выходные параметры, следующий K
элементы соответствуют K
производные потери относительно K
состояния выходные параметры и последний элемент соответствуют memory
.
Если количество выходных параметров может варьироваться, то используйте varargout
вместо выходных аргументов. В этом случае, varargout
массив ячеек выходных параметров, где первый N
элементы соответствуют N
производные потери относительно N
входные параметры слоя, следующий P
элементы соответствуют производным потери относительно P
настраиваемые параметры и следующий K
элементы соответствуют производным потери относительно K
входные параметры состояния.
Значения X
и Z
эквивалентны в прямых функциях. Размерности dLdZ
совпадают с размерностями Z
.
Размерности и тип данных dLdX
совпадают с размерностями и типом данных X
. Размерности и типы данных dLdW
совпадают с размерностями и типами данных W
.
Чтобы вычислить производные потери, можно использовать цепочечное правило:
При использовании trainNetwork
функция, слой автоматически обновляет настраиваемые параметры с помощью производных dLdW
во время обратного прохода.
Для примера, показывающего, как задать пользовательскую обратную функцию, смотрите, Задают Пользовательский Слой Обратная Функция.
Выходные параметры пользовательского слоя обратная функция не должны быть комплексными. Если ваша обратная функция включает комплексные числа, то преобразуйте все выходные параметры обратной функции к вещественным значениям прежде, чем возвратить их.
Если слой вперед функции полностью поддерживает 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 изображением или входом функции только. Генерация кода не делает уровней поддержки со свойствами состояний (свойства с атрибутом State
).
Для примера, показывающего, как создать пользовательский слой, который поддерживает генерацию кода, смотрите, Задают Пользовательский Слой Глубокого обучения для Генерации кода.
Чтобы создать пользовательский слой, который сам задает график слоев, можно объявить dlnetwork
возразите как настраиваемый параметр в properties (Learnable)
раздел определения слоя. Этот метод известен как сетевой состав. Можно использовать сетевой состав для:
Создайте один пользовательский слой, который представляет блок learnable слоев, например, остаточный блок.
Создайте сеть с потоком управления, например, сеть с разделом, который может динамически измениться в зависимости от входных данных.
Создайте сеть с циклами, например, сеть с разделами, которые подают выход назад в себя.
Для вложенных сетей, которые имеют и настраиваемые параметры и параметры состояния, например, сети с нормализацией партии. или слоями LSTM, объявляют сеть в properties (Learnable, State)
раздел определения слоя.
Если слой вперед функции полностью поддерживает 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).
Если вы создаете пользовательский слой глубокого обучения, то можно использовать checkLayer
функционируйте, чтобы проверять, что слой допустим. Функция проверяет, что слои для валидности, совместимости с GPU, правильно задали градиенты и совместимость генерации кода. Чтобы проверять, что слой допустим, запустите следующую команду:
checkLayer(layer,validInputSize)
layer
экземпляр слоя, validInputSize
векторный массив или массив ячеек, задающий допустимые входные размеры к слою. Чтобы свериться с несколькими наблюдениями, используйте ObservationDimension
опция. Чтобы проверять на совместимость генерации кода, установите CheckCodegenCompatibility
опция к 1
TRUE. Для больших входных размеров проверки градиента занимают больше времени, чтобы запуститься. Чтобы ускорить тесты, задайте меньший допустимый входной размер.Для получения дополнительной информации смотрите Проверку Пользовательская Валидность Слоя.
checkLayer
Проверяйте валидность слоя пользовательского слоя preluLayer
.
Пользовательский слой preluLayer
, присоединенный к этому пример как вспомогательный файл, применяет операцию PReLU к входным данным. Чтобы получить доступ к этому слою, откройте этот пример как live скрипт.
Создайте экземпляр слоя и проверяйте его валидность с помощью checkLayer
. Задайте допустимый входной размер, чтобы быть размером одного наблюдения за типичным входом к слою. Слой ожидает 4-D входные параметры массивов, где первые три измерения соответствуют высоте, ширине и количеству каналов предыдущего слоя выход, и четвертая размерность соответствует наблюдениям.
Задайте типичный размер входа наблюдения и установите ObservationDimension
опция к 4.
layer = preluLayer(20); 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: 18 Passed, 0 Failed, 0 Incomplete, 10 Skipped. Time elapsed: 1.1055 seconds.
Здесь, функция не обнаруживает проблем со слоем.
functionLayer
| checkLayer
| setLearnRateFactor
| setL2Factor
| getLearnRateFactor
| getL2Factor
| findPlaceholderLayers
| replaceLayer
| assembleNetwork
| PlaceholderLayer