При создании пользовательского слоя глубокого обучения можно использовать checkLayer для проверки допустимости слоя. Функция проверяет уровни на достоверность, совместимость графического процессора, правильно определенные градиенты и совместимость генерации кода. Для проверки допустимости слоя выполните следующую команду:
checkLayer(layer,validInputSize,'ObservationDimension',dim)
layer является экземпляром слоя, validInputSize является вектором или массивом ячеек, определяющим допустимые размеры входных данных слоя, и dim задает размер наблюдений во входных данных слоя. Для больших размеров ввода проверка градиента занимает больше времени. Чтобы ускорить тесты, укажите допустимый размер ввода меньшего размера.Проверка допустимости примера пользовательского слоя preluLayer.
Определите пользовательский слой PReLU. Чтобы создать этот слой, сохраните файл preluLayer.m в текущей папке.
Создание экземпляра слоя и проверка его допустимости с помощью checkLayer. Задайте допустимый размер ввода, равный типовому размеру одного входного сигнала наблюдения для слоя. Для одного входа уровень ожидает наблюдения размера h-by-w-by-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. 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. 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: 9 Passed, 0 Failed, 0 Incomplete, 13 Skipped. Time elapsed: 0.12426 seconds.
Результаты показывают количество пройденных, неудачных и пропущенных тестов. Если не указать 'ObservationsDimension' или не имеют графического процессора, то функция пропускает соответствующие тесты.
Проверка нескольких наблюдений
Для ввода с несколькими наблюдениями слой ожидает массив наблюдений размера h-by-w-by-c-by-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. 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.047134 seconds.
В этом случае функция не обнаруживает никаких проблем с уровнем.
checkLayer функция проверяет действительность пользовательского слоя, выполняя ряд тестов.
checkLayer функция использует эти тесты для проверки достоверности пользовательских промежуточных слоев (слоев типа nnet.layer.Layer).
| Тест | Описание |
|---|---|
functionSyntaxesAreCorrect | Синтаксисы функций слоя определены правильно. |
predictDoesNotError | predict не приводит к ошибке. |
forwardDoesNotError | Если указано, |
forwardPredictAreConsistentInSize | Когда |
backwardDoesNotError | Если указано, backward не приводит к ошибке. |
backwardIsConsistentInSize | Когда
|
predictIsConsistentInType | Выходные данные |
forwardIsConsistentInType | Когда |
backwardIsConsistentInType | Когда |
gradientsAreNumericallyCorrect | Когда backward указан, градиенты вычислены в backward согласуются с числовыми градиентами. |
backwardPropagationDoesNotError | Когда backward не указан, производные можно вычислить с помощью автоматической дифференциации. |
codegenPragmaDefinedInClassDef | pragma "%#codegen" для генерации кода указывается в файле класса. |
checkForSupportedLayerPropertiesForCodegen | Свойства слоя поддерживают создание кода. |
predictIsValidForCodeGeneration | predict действителен для создания кода. |
Тесты predictIsConsistentInType, forwardIsConsistentInType, и backwardIsConsistentInType также проверьте совместимость графического процессора. Для выполнения функций уровня на GPU эти функции должны поддерживать входы и выходы типа gpuArray с базовым типом данных single.
checkLayer функция использует эти тесты для проверки достоверности пользовательских выходных слоев (слоев типа nnet.layer.ClassificationLayer или nnet.layer.RegressionLayer).
| Тест | Описание |
|---|---|
forwardLossDoesNotError | forwardLoss не приводит к ошибке. |
backwardLossDoesNotError | backwardLoss не приводит к ошибке. |
forwardLossIsScalar | Выходные данные forwardLoss является скалярным. |
backwardLossIsConsistentInSize | Когда backwardLoss указано, выход backwardLoss согласован по размеру: dLdY имеет тот же размер, что и прогнозы Y. |
forwardLossIsConsistentInType | Выходные данные |
backwardLossIsConsistentInType | Когда |
gradientsAreNumericallyCorrect | Когда backwardLoss указан, градиенты вычислены в backwardLoss численно корректны. |
backwardPropagationDoesNotError | Когда backwardLoss не указан, производные можно вычислить с помощью автоматической дифференциации. |
forwardLossIsConsistentInType и backwardLossIsConsistentInType тесты также проверяют совместимость графического процессора. Для выполнения функций уровня на GPU эти функции должны поддерживать входы и выходы типа gpuArray с базовым типом данных single.
Для проверки достоверности слоя, checkLayer функция генерирует данные в зависимости от типа слоя:
| Тип слоя | Описание сгенерированных данных |
|---|---|
| Промежуточное звено | Значения в диапазоне [-1,1] |
| Результат регрессии | Прогнозы и цели со значениями в диапазоне [-1,1] |
| Результат классификации | Прогнозы со значениями в диапазоне [0,1]. При указании Если не указать |
Чтобы проверить наличие нескольких наблюдений, задайте размер наблюдения с помощью 'ObservationDimension' пара имя-значение. Если указан размер наблюдения, то checkLayer функция проверяет действительность функций уровня с использованием сгенерированных данных с мини-партиями размера 1 и 2. Если эта пара имя-значение не указана, то функция пропускает тесты, которые проверяют допустимость функций слоя для нескольких наблюдений.
Если тест завершается неуспешно при использовании checkLayer, то функция обеспечивает тестовую диагностику и рамочную диагностику. Диагностика теста выделяет все проблемы, обнаруженные в слое. Диагностика структуры предоставляет более подробную информацию.
Тест functionSyntaxesAreCorrect проверяет, что функции слоя имеют правильно определенные синтаксисы.
| Тест-диагностика | Описание | Возможное решение |
|---|---|---|
Incorrect number of input arguments for 'predict' in Layer. | Синтаксис для predict функция не согласуется с количеством входов слоев. | Укажите правильное количество входных и выходных аргументов в Синтаксис для Совет Если количество входов в Совет Если пользовательский слой имеет |
Incorrect number of output arguments for 'predict' in Layer | Синтаксис для predict функция не согласуется с количеством выходов уровня. | |
Incorrect number of input arguments for 'forward' in Layer | Синтаксис необязательного forward функция не согласуется с количеством входов слоев. | Укажите правильное количество входных и выходных аргументов в Синтаксис для Совет Если количество входов в Совет Если пользовательский слой имеет |
Incorrect number of output arguments for 'forward' in Layer | Синтаксис необязательного forward функция не согласуется с количеством выходов уровня. | |
Incorrect number of input arguments for 'backward' in Layer | Синтаксис необязательного backward функция не согласуется с количеством входов и выходов уровня. | Укажите правильное количество входных и выходных аргументов в Синтаксис для
Для выходных данных, Совет Если количество входов в Если количество выходов может варьироваться, используйте Совет Если функции прямого уровня поддерживают |
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 выходы функций прямого уровня
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 - количество обучаемых параметров.
Производные dLdX1, …, dLdXn должен быть того же размера, что и соответствующие входные данные слоя, и dLdW1,…,dLdWk должен быть того же размера, что и соответствующие обучаемые параметры. Размеры должны быть согласованы для входных данных с одним и несколькими наблюдениями.
| Тест-диагностика | Описание | Возможное решение |
|---|---|---|
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'. | Производные потерь по отношению к обучаемым параметрам должны быть того же размера, что и соответствующие обучаемые параметры. | Возврат производных |
Совет
Если функции прямого уровня поддерживают 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 объекты, то слой совместим с GPU. В противном случае, чтобы быть совместимым с GPU, функции уровня должны поддерживать входы и обратные выходы типа gpuArray(Панель инструментов параллельных вычислений).
Поддержка многих встроенных функций MATLAB ® gpuArray(Панель инструментов параллельных вычислений) и dlarray входные аргументы. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray. Список функций, выполняемых на графическом процессоре, см. в разделе Выполнение функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений). Чтобы использовать графический процессор для глубокого обучения, необходимо также иметь поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Дополнительные сведения о работе с графическими процессорами в 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'. | Тип производной потери обучаемых параметров должен соответствовать соответствующим обучаемым параметрам. | Для каждого обучаемого параметра возвращает производную с тем же типом, что и соответствующий обучаемый параметр. |
Совет
Если функции прямого уровня поддерживают 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.
Если установить 'CheckCodegenCompatibility' опция для true, то checkLayer функция проверяет уровень на совместимость генерации кода.
Тест codegenPragmaDefinedInClassDef проверяет, содержит ли определение слоя прагматику создания кода %#codegen. Тест checkForSupportedLayerPropertiesForCodegen проверяет, поддерживают ли свойства слоя создание кода. Тест predictIsValidForCodegeneration проверяет, что выходы predict непротиворечивы в измерении и размере партии.
Генерация кода поддерживает промежуточные слои только с 2-D вводом изображения.
| Тест-диагностика | Описание | Возможное решение |
|---|---|---|
Specify '%#codegen' in the class definition of custom layer | Определение слоя не включает прагматику "%#codegen" для генерации кода. |
Добавить |
Nonscalar layer properties must be type single or double or character array for custom layer | Слой содержит несалярные свойства типа, отличного от одиночного, двойного или символьного массива. | Преобразование несалярных свойств для использования представления типа с одиночным, двойным или символьным массивом. Например, преобразовать категориальный массив в массив целых чисел типа |
Scalar layer properties must be numeric, logical, or string for custom layer | Слой содержит скалярные свойства, отличные от числовых, логических или строковых. | Преобразование скалярных свойств для использования числового представления или представления типа logical или string. Например, преобразовать категориальный скаляр в целое число типа |
For code generation, 'Z' must have the same number of dimensions as the layer input. | Количество размеров выходного сигнала | В |
For code generation, 'Z' must have the same batch size as the layer input. | Размер пакета выходных данных | В |