Если вы создаете пользовательский слой глубокого обучения, то можно использовать 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. Running nnet.checklayer.TestLayerWithoutBackward .......... ... Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 13 Passed, 0 Failed, 0 Incomplete, 4 Skipped. Time elapsed: 0.28215 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)
Running nnet.checklayer.TestLayerWithoutBackward .......... ....... Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 17 Passed, 0 Failed, 0 Incomplete, 0 Skipped. Time elapsed: 0.15864 seconds.
В этом случае функция не обнаруживает проблем со слоем.
checkLayer функционируйте проверяет валидность пользовательского слоя путем выполнения серии тестов.
checkLayer функционируйте использует эти тесты, чтобы проверять валидность пользовательских промежуточных слоев (слои типа nnet.layer.Layer).
| Тест | Описание |
|---|---|
functionSyntaxesAreCorrect | Синтаксисы функций уровня правильно заданы. |
predictDoesNotError | predict не делает ошибки. |
forwardDoesNotError | Когда задано, |
forwardPredictAreConsistentInSize | Когда |
backwardDoesNotError | Когда задано, backward не делает ошибки. |
backwardIsConsistentInSize | Когда
|
predictIsConsistentInType | Выходные параметры |
forwardIsConsistentInType | Когда |
backwardIsConsistentInType | Когда |
gradientsAreNumericallyCorrect | Когда backward задан, градиенты, вычисленные в backward сопоставимы с числовыми градиентами. |
backwardPropagationDoesNotError | Когда backward не задан, производные могут быть вычислены с помощью автоматического дифференцирования. |
Тесты predictIsConsistentInType, forwardIsConsistentInType, и backwardIsConsistentInType также проверяйте на совместимость графического процессора. Чтобы выполнить функции уровня на графическом процессоре, функции должны поддержать вводы и выводы типа gpuArray с базовым типом данных single.
checkLayer функционируйте использует эти тесты, чтобы проверять валидность пользовательских выходных слоев (слои типа nnet.layer.ClassificationLayer или nnet.layer.RegressionLayer).
| Тест | Описание |
|---|---|
forwardLossDoesNotError | forwardLoss не делает ошибки. |
backwardLossDoesNotError | backwardLoss не делает ошибки. |
forwardLossIsScalar | Выход forwardLoss isscalar. |
backwardLossIsConsistentInSize | Когда backwardLoss задан, выход backwardLoss сопоставимо в размере: dLdY одного размера с прогнозами Y. |
forwardLossIsConsistentInType | Выход |
backwardLossIsConsistentInType | Когда |
gradientsAreNumericallyCorrect | Когда backwardLoss задан, градиенты, вычисленные в backwardLoss численно правильны. |
backwardPropagationDoesNotError | Когда backwardLoss не задан, производные могут быть вычислены с помощью автоматического дифференцирования. |
forwardLossIsConsistentInType и backwardLossIsConsistentInType тесты также проверяют на совместимость графического процессора. Чтобы выполнить функции уровня на графическом процессоре, функции должны поддержать вводы и выводы типа gpuArray с базовым типом данных single.
Проверять валидность слоя, checkLayer функция генерирует данные в зависимости от типа слоя:
| Тип слоя | Описание сгенерированных данных |
|---|---|
| Промежуточное звено | Значения в области значений [-1,1] |
| Regression выход | Прогнозы и цели со значениями в области значений [-1,1] |
| Classification выход | Прогнозы со значениями в области значений [0,1]. Если вы задаете Если вы не задаете |
Чтобы проверять на несколько наблюдений, задайте размерность наблюдения с помощью 'ObservationDimension' пара "имя-значение". Если вы задаете размерность наблюдения, то checkLayer функционируйте проверяет, что функции уровня являются сгенерированными данными допустимого использования с мини-пакетами размера 1 и 2. Если вы не задаете эту пару "имя-значение", то функция пропускает тесты, которые проверяют, что функции уровня допустимы для нескольких наблюдений.
Если тест перестал работать, когда вы используете checkLayer, затем функция обеспечивает тестовую диагностику и диагностику в среде. Тестовая диагностика подсвечивает любые проблемы, найденные со слоем. Диагностика в среде обеспечивает более подробную информацию.
Тест functionSyntaxesAreCorrect проверки, что функции уровня правильно задали синтаксисы.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
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. | Исправьте ошибку, описанную в СоветЕсли слой вперед функции поддерживает |
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. | Исправьте ошибку, описанную в СоветЕсли |
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 параметрами. | Возвратите производные |
Если слой вперед функции поддерживает dlarray объекты, затем программное обеспечение автоматически определяет обратную функцию, и вы не должны задавать backward функция. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray.
Выходной слой. Тест forwardLossIsScalar проверки, что выход forwardLoss функция является скаляром. Когда backwardLoss функция задана, тест backwardLossIsConsistentInSize проверки, что выходные параметры forwardLoss и backwardLoss имеют правильный размер.
Синтаксис для forwardLoss loss = forwardLoss(layer, Y, T). Вход Y соответствует прогнозам, сделанным сетью. Этими прогнозами является выход предыдущего слоя. Вход T соответствует учебным целям. Выход loss потеря между Y и T согласно заданной функции потерь. Выход loss должен быть скаляр.
Если forwardLoss функционируйте поддерживает dlarray объекты, затем программное обеспечение автоматически определяет обратную функцию потерь, и вы не должны задавать backwardLoss функция. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray.
Синтаксис для 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'. | Когда backwardLoss задан, производные потери относительно входа слоя должны быть одного размера с входом слоя. | Возвратите производный Если |
Эти тесты проверяют, что функция уровня, выходные параметры сопоставимы в типе и что функциями уровня является совместимый графический процессор.
Если слой вперед функции полностью поддерживает dlarray объекты, затем слоем является совместимый графический процессор. В противном случае, чтобы быть совместимым графическим процессором, функции уровня должны поддержать входные параметры и возвратить выходные параметры типа gpuArray.
Много встроенных функций MATLAB® поддерживают gpuArray и dlarray входные параметры. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray. Для списка функций, которые выполняются на графическом процессоре, смотрите функции 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 параметр. |
Если слой вперед функции поддерживает dlarray объекты, затем программное обеспечение автоматически определяет обратную функцию, и вы не должны задавать backward функция. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray.
Выходной слой. Тесты 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. | Возвратите |
Если forwardLoss функционируйте поддерживает dlarray объекты, затем программное обеспечение автоматически определяет обратную функцию потерь, и вы не должны задавать backwardLoss функция. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray.
Тест gradientsAreNumericallyCorrect проверки, что градиенты, вычисленные функциями уровня, численно правильны. Тест backwardPropagationDoesNotError проверки, что производные могут быть вычислены с помощью автоматического дифференцирования.
Промежуточные Слои. Когда дополнительный backward функция не задана, тест backwardPropagationDoesNotError проверки, что производные могут быть вычислены с помощью автоматического дифференцирования. Когда дополнительный backward функция задана, тест gradientsAreNumericallyCorrect тесты, что градиенты вычисляются в backward численно правильны.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Expected a dlarray with no dimension labels, but instead found labels. | Когда дополнительный backward функция не задана, слой, прямые функции должны вывести dlarray объекты без меток размерности. | Убедитесь, что любой dlarray объекты, созданные в слое прямые функции, не содержат метки размерности. |
Unable to backward propagate through the layer. Check that the 'forward' function fully supports automatic differentiation. Alternatively, implement the 'backward' function manually. | Один или несколько из следующего:
| Проверяйте, что прямые функции поддерживают Проверяйте что производные входа В качестве альтернативы задайте пользовательскую обратную функцию путем создания функции с именем |
Unable to backward propagate through the layer. Check that the 'predict' function fully supports automatic differentiation. Alternatively, implement the 'backward' function manually. | ||
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. |
Если слой вперед функции поддерживает dlarray объекты, затем программное обеспечение автоматически определяет обратную функцию, и вы не должны задавать backward функция. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray.
Выходной слой. Когда дополнительный backwardLoss функция не задана, тест backwardPropagationDoesNotError проверки, что производные могут быть вычислены с помощью автоматического дифференцирования. Когда дополнительный backwardLoss функция задана, тест gradientsAreNumericallyCorrect тесты, что градиенты вычисляются в backwardLoss численно правильны.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Expected a dlarray with no dimension labels, but instead found labels | Когда дополнительный backwardLoss функция не задана, forwardLoss функция должна вывести dlarray объекты без меток размерности. | Убедитесь, что любой dlarray объекты создаются в forwardLoss функция не содержит метки размерности. |
Unable to backward propagate through the layer. Check that the 'forwardLoss' function fully supports automatic differentiation. Alternatively, implement the 'backwardLoss' function manually | Один или несколько из следующего:
| Проверяйте что Проверяйте что производные входа В качестве альтернативы задайте пользовательскую обратную функцию потерь путем создания функции с именем |
The derivative 'dLdY' for 'backwardLoss' is inconsistent with the numerical gradient. | Один или несколько из следующего:
| Проверяйте что производные в Если производные правильно вычисляются, то в Если абсолютные и относительные погрешности в приемлемом поле допуска, то можно проигнорировать эту тестовую диагностику. |
Если forwardLoss функционируйте поддерживает dlarray объекты, затем программное обеспечение автоматически определяет обратную функцию потерь, и вы не должны задавать backwardLoss функция. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray.