Если вы создаете пользовательский слой глубокого обучения, то можно использовать функцию checkLayer
, чтобы проверять, что слой допустим. Функция проверяет слои на валидность, совместимость графического процессора и правильно заданные градиенты. Чтобы проверять, что слой допустим, запустите следующую команду:
checkLayer(layer,validInputSize,'ObservationDimension',dim)
layer
является экземпляром слоя, validInputSize
является векторным массивом или массивом ячеек, задающим допустимые входные размеры к слою, и dim
задает размерность наблюдений во входных данных слоя. Для больших входных размеров проверки градиента занимают больше времени, чтобы запуститься. Чтобы ускорить тесты, задайте меньший допустимый входной размер.Проверяйте валидность примера пользовательский слой preluLayer
.
Задайте пользовательский слой PReLU. Чтобы создать этот слой, сохраните файл preluLayer.m
в текущей папке.
Создайте экземпляр слоя и проверяйте, что это - допустимое использование checkLayer
. Установите допустимый входной размер на типичный размер одного входа наблюдения к слою. Для одного входа слой ожидает наблюдения за размером h w c, где h, w, и c являются высотой, шириной и количеством каналов предыдущего слоя вывод, соответственно.
Задайте validInputSize
как типичный размер входного массива.
layer = preluLayer(20,'prelu');
validInputSize = [5 5 20];
checkLayer(layer,validInputSize)
Skipping multi-observation tests. To enable tests with multiple observations, specify the 'ObservationDimension' option in checkLayer. For 2-D image data, set 'ObservationDimension' to 4. For 3-D image data, set 'ObservationDimension' to 5. For sequence data, set 'ObservationDimension' to 2. Skipping GPU tests. No compatible GPU device found. Running nnet.checklayer.TestCase .......... ... Done nnet.checklayer.TestCase __________ Test Summary: 13 Passed, 0 Failed, 0 Incomplete, 11 Skipped. Time elapsed: 1.532 seconds.
Результаты показывают количество переданных, проваленных, и пропущенных тестов. Если вы не задаете опцию 'ObservationsDimension'
или не имеете графического процессора, то функция пропускает соответствующие тесты.
Проверяйте несколько наблюдений
Для входа мультинаблюдения слой ожидает массив наблюдений за размером h w c N, где h, w, и c являются высотой, шириной и количеством каналов, соответственно, и N является количеством наблюдений.
Чтобы проверять валидность слоя на несколько наблюдений, задайте типичный размер наблюдения и установите 'ObservationDimension'
на 4.
layer = preluLayer(20,'prelu'); validInputSize = [5 5 20]; checkLayer(layer,validInputSize,'ObservationDimension',4)
Skipping GPU tests. No compatible GPU device found. Running nnet.checklayer.TestCase .......... ........ Done nnet.checklayer.TestCase __________ Test Summary: 18 Passed, 0 Failed, 0 Incomplete, 6 Skipped. Time elapsed: 2.196 seconds.
В этом случае функция не обнаруживает проблем со слоем.
Функция checkLayer
проверяет валидность пользовательского слоя путем выполнения серии тестов.
Функция checkLayer
использует эти тесты, чтобы проверять валидность пользовательских промежуточных слоев (слои типа nnet.layer.Layer
).
Тест | Описание |
---|---|
methodSignaturesAreCorrect | Синтаксисы функций уровня правильно заданы. |
predictDoesNotError | predict не делает ошибки. |
forwardDoesNotError |
|
forwardPredictAreConsistentInSize |
|
backwardDoesNotError | backward не делает ошибки. |
backwardIsConsistentInSize | Выходные параметры
|
predictIsConsistentInType | Выходные параметры |
forwardIsConsistentInType | Выходные параметры |
backwardIsConsistentInType | Выходные параметры |
gradientsAreNumericallyCorrect | Градиенты, вычисленные в backward , сопоставимы с числовыми градиентами. |
Тесты predictIsConsistentInType
, forwardIsConsistentInType
и backwardIsConsistentInType
также проверяют на совместимость графического процессора. Чтобы выполнить функции уровня на графическом процессоре, функции должны поддержать вводы и выводы типа gpuArray
с базовым типом данных single
.
Если вы не реализовали forward
, то checkLayer
не запускает forwardDoesNotError
, forwardPredictAreConsistentInSize
и тесты forwardIsConsistentInType
.
Функция checkLayer
использует эти тесты, чтобы проверять валидность пользовательских выходных слоев (слои типа nnet.layer.ClassificationLayer
или nnet.layer.RegressionLayer
).
Тест | Описание |
---|---|
forwardLossDoesNotError | forwardLoss не делает ошибки. |
backwardLossDoesNotError | backwardLoss не делает ошибки. |
forwardLossIsScalar | Вывод forwardLoss является скаляром. |
backwardLossIsConsistentInSize | Вывод backwardLoss сопоставим в размере: dLdY одного размера как прогнозы Y . |
forwardLossIsConsistentInType | Вывод |
backwardLossIsConsistentInType | Вывод |
gradientsAreNumericallyCorrect | Градиенты, вычисленные в backwardLoss , численно правильны. |
forwardLossIsConsistentInType
и тесты backwardLossIsConsistentInType
также проверяют на совместимость графического процессора. Чтобы выполнить функции уровня на графическом процессоре, функции должны поддержать вводы и выводы типа gpuArray
с базовым типом данных single
.
Чтобы проверять валидность слоя, функция checkLayer
генерирует данные в зависимости от типа слоя:
Тип слоя | Описание сгенерированных данных |
---|---|
Промежуточное звено | Значения в области значений [-1,1] |
Regression вывод | Прогнозы и цели со значениями в области значений [-1,1] |
Classification вывод | Прогнозы со значениями в области значений [0,1]. Если вы задаете опцию Если вы не задаете опцию |
Чтобы проверять на несколько наблюдений, задайте размерность наблюдения с помощью пары "имя-значение" 'ObservationDimension'
. Если вы задаете размерность наблюдения, то функция checkLayer
проверяет, что функции уровня являются сгенерированными данными допустимого использования с мини-пакетами размера 1 и 2. Если вы не задаете эту пару "имя-значение", то функция пропускает тесты, которые проверяют, что функции уровня допустимы для нескольких наблюдений.
Если тест перестал работать, когда вы используете checkLayer
, то функция обеспечивает тестовую диагностику и диагностику в среде. Тестовая диагностика подсвечивает любые проблемы, найденные со слоем. Диагностика в среде обеспечивает более подробную информацию.
Тестовый methodSignaturesAreCorrect
проверяет, что функции уровня правильно задали синтаксисы.
Тестовая диагностика | Описание | Возможное решение |
---|---|---|
Incorrect number of input arguments for 'predict' in Layer . | Синтаксис для predict не сопоставим с количеством входных параметров слоя. | Задайте правильное количество аргументов ввода и вывода в Синтаксис для [Z1,…,Zm] = predict(layer,X1,…,Xn) X1,…,Xn является входными параметрами слоя n , и Z1,…,Zm слой m выходные параметры. Значения n и m должны соответствовать свойствам NumInputs и NumOutputs слоя.СоветЕсли количество входных параметров к |
Incorrect number of output arguments for 'predict' in Layer | Синтаксис для predict не сопоставим с количеством слоя выходные параметры. | |
Incorrect number of input arguments for 'forward' in Layer | Синтаксис для forward не сопоставим с количеством входных параметров слоя. | Задайте правильное количество аргументов ввода и вывода в Синтаксис для [Z1,…,Zm,memory] = forward(layer,X1,…,Xn) X1,…,Xn является входными параметрами слоя n , Z1,…,Zm слой m выходные параметры, и memory является памятью о слое.СоветЕсли количество входных параметров к |
Incorrect number of output arguments for 'forward' in Layer | Синтаксис для forward не сопоставим с количеством слоя выходные параметры. | |
Incorrect number of input arguments for 'backward' in Layer | Синтаксис для backward не сопоставим с количеством вводов и выводов слоя. | Задайте правильное количество аргументов ввода и вывода в Синтаксис для [dLdX1,…,dLdXn,dLdW1,…,dLdWk] = backward(layer,X1,…,Xn,Z1,…,Zm,dLdZ1,…,dLdZm,memory) X1,…,Xn является входными параметрами слоя n , Z1,…,Zm m выходные параметры forward , dLdZ1,…,dLdZm является градиентами, назад распространенными от следующего слоя, и memory является вывод memory forward . Для выходных параметров dLdX1,…,dLdXn является производными потери относительно входных параметров слоя, и dLdW1,…,dLdWk производные потери относительно k learnable параметры. Чтобы уменьшать использование памяти путем предотвращения неиспользуемых переменных, являющихся сохраненным между прямым и обратным проходом, замените соответствующие входные параметры на ~ .СоветЕсли количество входных параметров к Если количество выходных параметров может отличаться, то используйте |
Incorrect number of output arguments for 'backward' in Layer | Синтаксис для backward не сопоставим с количеством слоя выходные параметры. |
Для слоев с несколькими вводами или выводами необходимо установить значения свойств слоя NumInputs
(или альтернативно, InputNames
) и NumOutputs
(или альтернативно, OutputNames
) в функции конструктора слоя, соответственно.
Функция checkLayer
проверяет, что функции уровня допустимы для сингла и нескольких наблюдений. Чтобы проверять на несколько наблюдений, задайте размерность наблюдения с помощью пары "имя-значение" 'ObservationDimension'
. Если вы задаете размерность наблюдения, то функция checkLayer
проверяет, что функции уровня являются сгенерированными данными допустимого использования с мини-пакетами размера 1 и 2. Если вы не задаете эту пару "имя-значение", то функция пропускает тесты, которые проверяют, что функции уровня допустимы для нескольких наблюдений.
Тестовая диагностика | Описание | Возможное решение |
---|---|---|
Skipping multi-observation tests. To enable checks with multiple observations, specify the 'ObservationDimension' parameter in checkLayer . | Если вы не задаете параметр 'ObservationDimension' в checkLayer , то функция пропускает тесты, которые проверяют данные с несколькими наблюдениями. | Используйте команду Для получения дополнительной информации смотрите Входные Размеры Слоя. |
Эти тесты проверяют, что слои не делают ошибки когда переданные входные данные допустимого размера.
Промежуточные Слои. Тестовый predictDoesNotError
, forwardDoesNotError
и backwardDoesNotError
проверяют, что функции уровня не делают ошибки когда переданные входные параметры допустимого размера. Если вы задаете размерность наблюдения, то функция проверяет слой и на одно наблюдение и на несколько наблюдений.
Тестовая диагностика | Описание | Возможное решение |
---|---|---|
The function 'predict' threw an error: | Ошибки функции predict , когда переданные данные размера validInputSize . | Исправьте ошибку, описанную в разделе Framework Diagnostic . |
The function 'forward' threw an error: | Ошибки функции forward , когда переданные данные размера validInputSize . | |
The function 'backward' threw an error: | Ошибки функции backward , когда передано вывод predict . |
Выходной слой. Тестовый forwardLossDoesNotError
и backwardLossDoesNotError
проверяют, что функции уровня не делают ошибки когда переданные входные параметры допустимого размера. Если вы задаете размерность наблюдения, то функция проверяет слой и на одно наблюдение и на несколько наблюдений.
Тестовая диагностика | Описание | Возможное решение |
---|---|---|
The function 'forwardLoss' threw an error: | Ошибки функции forwardLoss , когда переданные данные размера validInputSize . | Исправьте ошибку, описанную в разделе Framework Diagnostic . |
The function 'backwardLoss' threw an error: | Ошибки функции backwardLoss , когда переданные данные размера validInputSize . |
Эти тесты проверяют, что функция уровня выходные параметры сопоставима в размере.
Промежуточные Слои. Тестовый backwardIsConsistentInSize
проверяет, что backward
функционирует выходные производные правильного размера.
Синтаксис для backward
[dLdX1,…,dLdXn,dLdW1,…,dLdWk] = backward(layer,X1,…,Xn,Z1,…,Zm,dLdZ1,…,dLdZm,memory)
X1,…,Xn
является входными параметрами слоя n
, Z1,…,Zm
m
выходные параметры forward
, dLdZ1,…,dLdZm
является градиентами, назад распространенными от следующего слоя, и memory
является вывод memory forward
. Для выходных параметров dLdX1,…,dLdXn
является производными потери относительно входных параметров слоя, и dLdW1,…,dLdWk
производные потери относительно k
learnable параметры. Чтобы уменьшать использование памяти путем предотвращения неиспользуемых переменных, являющихся сохраненным между прямым и обратным проходом, замените соответствующие входные параметры на ~
.Если количество входных параметров к 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
является количеством learnable параметров.
Производные dLdX1
, …, dLdXn
должен быть одного размера, когда соответствующий слой вводит, и dLdW1,…,dLdWk
должен быть одного размера как соответствующие learnable параметры. Размеры должны быть сопоставимы для входных данных с синглом и несколькими наблюдениями.
Тестовая диагностика | Описание | Возможное решение |
---|---|---|
Incorrect size of 'dLdX' for 'backward' . | Производные потери относительно входных параметров слоя должны быть одного размера как соответствующий вход слоя. | Возвратите производные |
Incorrect size of the derivative of the loss with respect to the input 'in1' for 'backward' | ||
The size of 'Z' returned from 'forward' must be the same as for 'predict' . | Выходные параметры predict должны быть одного размера как соответствующие выходные параметры forward . | Возвратите выходные параметры |
Incorrect size of the derivative of the loss with respect to 'W' for 'backward' . | Производные потери относительно learnable параметров должны быть одного размера как соответствующие learnable параметры. | Возвратите производные |
Выходной слой. Тестовый forwardLossIsScalar
и backwardLossIsConsistentInSize
проверяют, что выходные параметры forwardLoss
и backwardLoss
имеют правильный размер.
Синтаксисом для forwardLoss
является loss = forwardLoss(layer, Y, T)
. Вход Y
соответствует прогнозам, сделанным сетью. Этими прогнозами является вывод предыдущего слоя. Вход T
соответствует учебным целям. Вывод loss
является потерей между Y
и T
согласно заданной функции потерь. Вывод loss
должен быть скаляром.
Синтаксисом для backwardLoss
является dLdY = backwardLoss(layer, Y, T)
. Входные параметры Y
являются прогнозами, сделанными сетью, и T
учебные цели. Вывод dLdY
является производной потери относительно прогнозов Y
. Вывод dLdY
должен быть одного размера как вход Y
слоя.
Тестовая диагностика | Описание | Возможное решение |
---|---|---|
Incorrect size of 'loss' for 'forwardLoss' . | Вывод loss forwardLoss должен быть скаляром. | Возвратите вывод |
Incorrect size of the derivative of loss 'dLdY' for 'backwardLoss' . | Производные потери относительно входа слоя должны быть одного размера как вход слоя. | Возвратите производный dLdY с тем же размером как вход Y слоя. |
Эти тесты проверяют, что функция уровня, выходные параметры сопоставимы в типе и что функциями уровня является совместимый графический процессор.
Для совместимости графического процессора функции уровня должны поддержать входные параметры и возвратить выходные параметры типа gpuArray
. Любые другие функции использование слоя должны сделать то же самое. Много встроенных функций MATLAB® поддерживают входные параметры gpuArray
. Если вы вызываете какую-либо из этих функций по крайней мере с одним входом gpuArray
, то функция выполняется на графическом процессоре и возвращает gpuArray
вывод. Для списка функций, которые выполняются на графическом процессоре, смотрите функции MATLAB Выполнения на графическом процессоре (Parallel Computing Toolbox). Чтобы использовать графический процессор для глубокого обучения, у вас должен также быть CUDA®, включенный NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше. Для получения дополнительной информации о работе с графическими процессорами в MATLAB смотрите, что графический процессор Вычисляет в MATLAB (Parallel Computing Toolbox).
Промежуточные Слои. Тесты predictIsConsistentInType
, forwardIsConsistentInType
и backwardIsConsistentInType
проверяют что выходные переменные функций уровня правильного типа данных. Тесты проверяют, что функции уровня возвращают сопоставимые типы данных когда данный входные параметры типов данных single
, double
и gpuArray
с базовыми типами single
или double
.
Если вы предварительно выделяете массивы с помощью функций как zeros
, то необходимо гарантировать, что типы данных этих массивов сопоставимы с входными параметрами функции уровня. Чтобы создать массив нулей совпадающего типа данных другого массива, используйте опцию 'like'
zeros
. Например, чтобы инициализировать массив нулей размера sz
с совпадающим типом данных как массив X
, используйте Z = zeros(sz,'like',X)
.
Тестовая диагностика | Описание | Возможное решение |
---|---|---|
Incorrect type of 'Z' for 'predict' . | Типы выходных параметров Z1,…,Zm predict должны быть сопоставимы с входными параметрами X1,…,Xn . | Возвратите выходные параметры |
Incorrect type of output 'out1' for 'predict' . | ||
Incorrect type of 'Z' for 'forward' . | Типы выходных параметров Z1,…,Zm forward должны быть сопоставимы с входными параметрами X1,…,Xn . | |
Incorrect type of output 'out1' for 'forward' . | ||
Incorrect type of 'dLdX' for 'backward' . | Типы производных dLdX1,…,dLdXn backward должны быть сопоставимы с входными параметрами X1,…,Xn . | Возвратите производные |
Incorrect type of the derivative of the loss with respect to the input 'in1' for 'backward' . | ||
Incorrect type of the derivative of loss with respect to 'W' for 'backward' . | Тип производной потери learnable параметров должен быть сопоставим с соответствующими learnable параметрами. | Для каждого learnable параметра возвратите производную с тем же типом как соответствующий learnable параметр. |
Выходной слой. Тесты forwardLossIsConsistentInType
и backwardLossIsConsistentInType
проверяют что выходные переменные функций уровня правильного типа данных. Тесты проверяют, что слои возвращают сопоставимые типы данных когда данный входные параметры типов данных single
, double
и gpuArray
с базовыми типами single
или double
.
Тестовая диагностика | Описание | Возможное решение |
---|---|---|
Incorrect type of 'loss' for 'forwardLoss' . | Тип вывода loss forwardLoss должен быть сопоставим с входом Y . | Возвратите |
Incorrect type of the derivative of loss 'dLdY' for 'backwardLoss' . | Тип вывода dLdY backwardLoss должен быть сопоставим с входом Y . | Возвратите |
Тестовый gradientsAreNumericallyCorrect
проверяет, что градиенты, вычисленные функциями уровня, численно правильны.
Промежуточные Слои. Тестовые тесты gradientsAreNumericallyCorrect
, что градиенты, вычисленные в backward
, численно правильны.
Тестовая диагностика | Описание | Возможное решение |
---|---|---|
The derivative 'dLdX' for 'backward' is inconsistent with the numerical gradient . | Один или несколько из следующего:
| Проверяйте, что производные в Если производные правильно вычисляются, то в разделе Если абсолютные и относительные погрешности в приемлемом поле допуска, то можно проигнорировать эту тестовую диагностику. |
The derivative of the loss with respect to the input 'in1' for 'backward' is inconsistent with the numerical gradient . | ||
The derivative of loss with respect to 'W' for 'backward' is inconsistent with the numerical gradient . |
Выходной слой. Тестовый gradientsAreNumericallyCorrect
проверяет, что градиенты, вычисленные в backwardLoss
, численно правильны.
Тестовая диагностика | Описание | Возможное решение |
---|---|---|
The derivative 'dLdY' for 'backwardLoss' is inconsistent with the numerical gradient . | Один или несколько из следующего:
| Проверяйте, что производные в Если производные правильно вычисляются, то в разделе Если абсолютные и относительные погрешности в приемлемом поле допуска, то можно проигнорировать эту тестовую диагностику. |