exponenta event banner

Проверка допустимости настраиваемого слоя

При создании пользовательского слоя глубокого обучения можно использовать 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Синтаксисы функций слоя определены правильно.
predictDoesNotErrorpredict не приводит к ошибке.
forwardDoesNotError

Если указано, forward не приводит к ошибке.

forwardPredictAreConsistentInSize

Когда forward указывается, forward и predict выходные значения одного и того же размера.

backwardDoesNotErrorЕсли указано, backward не приводит к ошибке.
backwardIsConsistentInSize

Когда backward уточняется, выходы backward непротиворечивы по размеру:

  • Производные по отношению к каждому входу имеют тот же размер, что и соответствующий вход.

  • Производные по отношению к каждому обучаемому параметру имеют тот же размер, что и соответствующий обучаемый параметр.

predictIsConsistentInType

Выходные данные predict согласуются по типу с входами.

forwardIsConsistentInType

Когда forward уточняется, выходы forward согласуются по типу с входами.

backwardIsConsistentInType

Когда backward уточняется, выходы backward согласуются по типу с входами.

gradientsAreNumericallyCorrectКогда backward указан, градиенты вычислены в backward согласуются с числовыми градиентами.
backwardPropagationDoesNotErrorКогда backward не указан, производные можно вычислить с помощью автоматической дифференциации.
codegenPragmaDefinedInClassDefpragma "%#codegen" для генерации кода указывается в файле класса.
checkForSupportedLayerPropertiesForCodegenСвойства слоя поддерживают создание кода.
predictIsValidForCodeGenerationpredict действителен для создания кода.

Тесты predictIsConsistentInType, forwardIsConsistentInType, и backwardIsConsistentInType также проверьте совместимость графического процессора. Для выполнения функций уровня на GPU эти функции должны поддерживать входы и выходы типа gpuArray с базовым типом данных single.

Выходные слои

checkLayer функция использует эти тесты для проверки достоверности пользовательских выходных слоев (слоев типа nnet.layer.ClassificationLayer или nnet.layer.RegressionLayer).

ТестОписание
forwardLossDoesNotErrorforwardLoss не приводит к ошибке.
backwardLossDoesNotErrorbackwardLoss не приводит к ошибке.
forwardLossIsScalarВыходные данные forwardLoss является скалярным.
backwardLossIsConsistentInSizeКогда backwardLoss указано, выход backwardLoss согласован по размеру: dLdY имеет тот же размер, что и прогнозы Y.
forwardLossIsConsistentInType

Выходные данные forwardLoss согласован по типу: loss является тем же типом, что и прогнозы Y.

backwardLossIsConsistentInType

Когда backwardLoss указано, выход backwardLoss согласован по типу: dLdY должен быть того же типа, что и прогнозы Y.

gradientsAreNumericallyCorrectКогда backwardLoss указан, градиенты вычислены в backwardLoss численно корректны.
backwardPropagationDoesNotErrorКогда backwardLoss не указан, производные можно вычислить с помощью автоматической дифференциации.

forwardLossIsConsistentInType и backwardLossIsConsistentInType тесты также проверяют совместимость графического процессора. Для выполнения функций уровня на GPU эти функции должны поддерживать входы и выходы типа gpuArray с базовым типом данных single.

Сгенерированные данные

Для проверки достоверности слоя, checkLayer функция генерирует данные в зависимости от типа слоя:

Тип слояОписание сгенерированных данных
Промежуточное звеноЗначения в диапазоне [-1,1]
Результат регрессииПрогнозы и цели со значениями в диапазоне [-1,1]
Результат классификации

Прогнозы со значениями в диапазоне [0,1].

При указании 'ObservationDimension' затем целевые объекты представляют собой одноступенчатые кодированные векторы (векторы, содержащие один 1 и 0 в другом месте).

Если не указать 'ObservationDimension' , то цели являются значениями в диапазоне [0,1].

Чтобы проверить наличие нескольких наблюдений, задайте размер наблюдения с помощью 'ObservationDimension' пара имя-значение. Если указан размер наблюдения, то checkLayer функция проверяет действительность функций уровня с использованием сгенерированных данных с мини-партиями размера 1 и 2. Если эта пара имя-значение не указана, то функция пропускает тесты, которые проверяют допустимость функций слоя для нескольких наблюдений.

Диагностика

Если тест завершается неуспешно при использовании checkLayer, то функция обеспечивает тестовую диагностику и рамочную диагностику. Диагностика теста выделяет все проблемы, обнаруженные в слое. Диагностика структуры предоставляет более подробную информацию.

Синтаксические функции

Тест functionSyntaxesAreCorrect проверяет, что функции слоя имеют правильно определенные синтаксисы.

Тест-диагностикаОписаниеВозможное решение
Incorrect number of input arguments for 'predict' in Layer.Синтаксис для predict функция не согласуется с количеством входов слоев.

Укажите правильное количество входных и выходных аргументов в predict.

Синтаксис для predict является [Z1,…,Zm] = predict(layer,X1,…,Xn), где X1,…,Xn являются n входные данные слоев и Z1,…,Zm являются m выходы слоев. Ценности n и m должны соответствовать NumInputs и NumOutputs свойства слоя.

Совет

Если количество входов в predict может варьироваться, а затем использовать varargin вместо X1,…,Xn. В этом случае varargin - массив ячеек входов, где varargin{i} соответствует Xi. Если количество выходов может варьироваться, используйте varargout вместо Z1,…,Zm. В этом случае varargout - массив ячеек выходных сигналов, где varargout{j} соответствует Zj.

Совет

Если пользовательский слой имеет dlnetwork для обучаемого параметра, затем в predict функции пользовательского слоя, используйте predict для функции dlnetwork. Использование dlnetwork объект predict функция гарантирует, что программное обеспечение использует правильные операции уровня для прогнозирования.

Incorrect number of output arguments for 'predict' in LayerСинтаксис для predict функция не согласуется с количеством выходов уровня.
Incorrect number of input arguments for 'forward' in LayerСинтаксис необязательного forward функция не согласуется с количеством входов слоев.

Укажите правильное количество входных и выходных аргументов в forward.

Синтаксис для forward является [Z1,…,Zm,memory] = forward(layer,X1,…,Xn), где X1,…,Xn являются n вводы слоев, Z1,…,Zm являются m выходы уровня, и memory - память слоя.

Совет

Если количество входов в forward может варьироваться, а затем использовать varargin вместо X1,…,Xn. В этом случае varargin - массив ячеек входов, где varargin{i} соответствует Xi. Если количество выходов может варьироваться, используйте varargout вместо Z1,…,Zm. В этом случае varargout - массив ячеек выходных сигналов, где varargout{j} соответствует Zj для j = 1,…,NumOutputs и varargout{NumOutputs + 1} соответствует memory.

Совет

Если пользовательский слой имеет dlnetwork для обучаемого параметра, затем в forward функции пользовательского слоя, используйте forward функции dlnetwork объект. Использование dlnetwork объект forward функция гарантирует, что программное обеспечение использует правильные операции уровня для обучения.

Incorrect number of output arguments for 'forward' in LayerСинтаксис необязательного forward функция не согласуется с количеством выходов уровня.
Incorrect number of input arguments for 'backward' in LayerСинтаксис необязательного backward функция не согласуется с количеством входов и выходов уровня.

Укажите правильное количество входных и выходных аргументов в 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 - количество обучаемых параметров.

Совет

Если функции прямого уровня поддерживают dlarray объекты, то программное обеспечение автоматически определяет обратную функцию, и вам не нужно указывать backward функция. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray.

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, то функция пропускает тесты, которые проверяют данные с помощью нескольких наблюдений.

Используйте команду checkLayer(layer,validInputSize,'ObservationDimension',dim), где layer является экземпляром пользовательского слоя, validInputSize является вектором, задающим допустимый размер ввода в слой, и dim задает размер наблюдений на входе слоя.

Дополнительные сведения см. в разделе Размеры вводимых слоев.

Функции не ошибаются

Эти тесты проверяют, что слои не ошибаются при передаче входных данных допустимого размера.

Промежуточные слои.  Тесты predictDoesNotError, forwardDoesNotError, и backwardDoesNotError убедитесь, что функции слоя не ошибаются при передаче входных данных допустимого размера. Если задан размер наблюдения, функция проверяет слой как для одного наблюдения, так и для нескольких наблюдений.

Тест-диагностикаОписаниеВозможное решение
The function 'predict' threw an error: predict ошибки функции при передаче данных размера validInputSize.

Устраните ошибку, описанную в Framework Diagnostic раздел.

Совет

Если функции прямого уровня поддерживают dlarray объекты, то программное обеспечение автоматически определяет обратную функцию, и вам не нужно указывать backward функция. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray.

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 раздел.

Совет

Если forwardLoss поддержка функций dlarray объекты, то программное обеспечение автоматически определяет обратную функцию потерь, и вам не нужно указывать backwardLoss функция. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray.

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'.Производные потерь по отношению к входам слоя должны быть того же размера, что и соответствующий вход слоя.

Возврат производных dLdX1,…,dLdXn с тем же размером, что и соответствующие входы слоев X1,…,Xn.

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.

Возврат выходных данных Z1,…,Zm из predict с тем же размером, что и соответствующие выходы Z1,…,Zm из forward.

Incorrect size of the derivative of the loss with respect to 'W' for 'backward'.Производные потерь по отношению к обучаемым параметрам должны быть того же размера, что и соответствующие обучаемые параметры.

Возврат производных dLdW1,…,dLdWk с тем же размером, что и соответствующие обучаемые параметры W1,…,Wk.

Совет

Если функции прямого уровня поддерживают 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 должен быть скаляром.

Возврат выходных данных loss как скаляр. Например, при наличии нескольких значений потерь можно использовать mean или sum.

Incorrect size of the derivative of loss 'dLdY' for 'backwardLoss'.Когда backwardLoss указано, производные потерь по отношению к входу слоя должны быть того же размера, что и вход слоя.

Возвращаемая производная dLdY с тем же размером, что и входной слой Y.

Если forwardLoss поддержка функций dlarray объекты, то программное обеспечение автоматически определяет обратную функцию потерь, и вам не нужно указывать backwardLoss функция. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray.

Согласованные типы данных и совместимость графического процессора

Эти тесты проверяют, что выходные данные функции уровня согласованы по типу и что функции уровня совместимы с графическим процессором.

Если функции прямого уровня полностью поддерживают 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.

Возврат выходных данных Z1,…,Zm с тем же типом, что и входы 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.

Возврат производных dLdX1,…,dLdXn с тем же типом, что и входы 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.

Вернуть loss с тем же типом, что и вход Y.

Incorrect type of the derivative of loss 'dLdY' for 'backwardLoss'.Тип вывода dLdY факультативного backwardLoss функция должна согласовываться с вводом Y.

Вернуть dLdY с тем же типом, что и вход 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.

Одно или несколько из следующих действий:

  • Когда необязательный backward функция не указана, функции прямого уровня не поддерживают dlarray объекты.

  • Когда необязательный backward функция не указана, трассировка входа dlarray объекты в функциях вперед были разорваны. Например, с помощью extractdata функция.

Проверка поддержки функций пересылки dlarray объекты. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray.

Проверьте, что производные входных данных dlarray объекты можно отслеживать. Чтобы узнать больше о производном следе dlarray см. раздел Производная трассировка.

Можно также определить пользовательскую обратную функцию, создав функцию с именем backward. Дополнительные сведения см. в разделе Обратная функция.

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.

Одно или несколько из следующих действий:

  • Когда необязательный backward указана функция, производная вычислена неправильно

  • Прямые функции не дифференцируются в некоторых точках ввода

  • Допуск ошибки слишком мал

Если функции прямого уровня поддерживают dlarray объекты, то программное обеспечение автоматически определяет обратную функцию, и вы можете опустить обратную функцию. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray.

Проверьте, что производные в backward правильно вычислены.

Если производные вычислены правильно, то в Framework Diagnostic проверьте вручную абсолютную и относительную погрешность между фактическими и ожидаемыми значениями производной.

Если абсолютные и относительные ошибки находятся в пределах допустимого допуска, можно игнорировать эту диагностику теста.

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

Одно или несколько из следующих действий:

  • Когда необязательный backwardLoss функция не указана, слой forwardLoss функция не поддерживает dlarray объекты.

  • Когда необязательный backwardLoss функция не указана, трассировка входа dlarray объекты в forwardLoss функция была нарушена. Например, с помощью extractdata функция.

Проверьте, что forwardLoss поддержка функций dlarray объекты. Список функций, поддерживающих dlarray см. Список функций с поддержкой dlarray.

Проверьте, что производные входных данных dlarray объекты можно отслеживать. Чтобы узнать больше о производном следе dlarray см. раздел Производная трассировка.

Можно также определить пользовательскую функцию обратной потери, создав функцию с именем backwardLoss. Дополнительные сведения см. в разделе Функции потери.

The derivative 'dLdY' for 'backwardLoss' is inconsistent with the numerical gradient.

Одно или несколько из следующих действий:

  • Производная относительно прогнозов Y неправильно вычислен

  • Функция не дифференцируется в некоторых точках ввода

  • Допуск ошибки слишком мал

Проверьте, что производные в backwardLoss правильно вычислены.

Если производные вычислены правильно, то в Framework Diagnostic проверьте вручную абсолютную и относительную погрешность между фактическими и ожидаемыми значениями производной.

Если абсолютные и относительные ошибки находятся в пределах допустимого допуска, можно игнорировать эту диагностику теста.

Совет

Если 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" для генерации кода.

Добавить %#codegen директиву (или pragma) для определения слоя, указывающую, что предполагается создать код для этого слоя. Добавление этой директивы дает команду анализатору кода MATLAB помочь в диагностике и устранении нарушений, которые приводят к ошибкам при создании кода.

Nonscalar layer properties must be type single or double or character array for custom layerСлой содержит несалярные свойства типа, отличного от одиночного, двойного или символьного массива.

Преобразование несалярных свойств для использования представления типа с одиночным, двойным или символьным массивом.

Например, преобразовать категориальный массив в массив целых чисел типа double представление категорий.

Scalar layer properties must be numeric, logical, or string for custom layerСлой содержит скалярные свойства, отличные от числовых, логических или строковых.

Преобразование скалярных свойств для использования числового представления или представления типа logical или string.

Например, преобразовать категориальный скаляр в целое число типа double представление категории.

For code generation, 'Z' must have the same number of dimensions as the layer input.

Количество размеров выходного сигнала Z из predict не соответствует количеству размеров входных данных слоя.

В predict функция возвращает выходные данные с тем же количеством размеров, что и входные данные слоя.

For code generation, 'Z' must have the same batch size as the layer input.

Размер пакета выходных данных Z из predict не соответствует размеру пакета входных данных слоя.

В predict функция возвращает выходные данные с размером партии в качестве входных данных слоя.

См. также

|

Связанные темы