Проверяйте пользовательскую валидность слоя

Если вы создаете пользовательский слой глубокого обучения, то можно использовать checkLayer функционируйте, чтобы проверять, что слой допустим. Функция проверяет, что слои для валидности, совместимости с GPU, правильно задали градиенты и совместимость генерации кода. Чтобы проверять, что слой допустим, запустите следующую команду:

checkLayer(layer,validInputSize)
где layer экземпляр слоя, validInputSize векторный массив или массив ячеек, задающий допустимые входные размеры к слою. Чтобы свериться с несколькими наблюдениями, используйте ObservationDimension опция. Чтобы проверять на совместимость генерации кода, установите CheckCodegenCompatibility опция к 1 TRUE. Для больших входных размеров проверки градиента занимают больше времени, чтобы запуститься. Чтобы ускорить тесты, задайте меньший допустимый входной размер.

Проверяйте пользовательскую валидность слоя

Проверяйте валидность примера пользовательский слой preluLayer.

Пользовательский слой preluLayer, присоединенный к этому пример как вспомогательный файл, применяет операцию PReLU к входным данным. Чтобы получить доступ к этому слою, откройте этот пример как live скрипт.

Создайте экземпляр слоя и проверяйте, что это - допустимое использование checkLayer. Установите допустимый входной размер на типичный размер одного входа наблюдения к слою. Для одного входа слой ожидает наблюдения за размером h w c, где h, w, и c являются высотой, шириной и количеством каналов предыдущего слоя выход, соответственно.

Задайте validInputSize как типичный размер входного массива.

layer = preluLayer(20);
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:
	 12 Passed, 0 Failed, 0 Incomplete, 16 Skipped.
	 Time elapsed: 0.14699 seconds.

Результаты показывают количество переданных, проваленных, и пропущенных тестов. Если вы не задаете ObservationsDimension опция, или не имеют графического процессора, затем функция пропускает соответствующие тесты.

Проверяйте несколько наблюдений

Для входа мультинаблюдения слой ожидает массив наблюдений за размером h w c N, где h, w, и c являются высотой, шириной и количеством каналов, соответственно, и N является количеством наблюдений.

Чтобы проверять валидность слоя на несколько наблюдений, задайте типичный размер наблюдения и установите ObservationDimension опция к 4.

layer = preluLayer(20);
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:
	 18 Passed, 0 Failed, 0 Incomplete, 10 Skipped.
	 Time elapsed: 0.18684 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 не задан, производные могут быть вычислены с помощью автоматического дифференцирования.
predictReturnsValidStatesДля слоев со свойствами состояний, predict функция возвращает допустимые состояния.
forwardReturnsValidStatesДля слоев со свойствами состояний, forward функция, если задано, возвращает допустимые состояния.
resetStateDoesNotErrorДля слоев со свойствами состояний, resetState функция, если задано, не делает ошибки и сбрасывает состояния к допустимым состояниям.
codegenPragmaDefinedInClassDefПрагма "%#codegen" поскольку генерация кода задана в файле класса.
checkForSupportedLayerPropertiesForCodegenСвойства слоя поддерживают генерацию кода.
predictIsValidForCodeGenerationpredict допустимо для генерации кода.
doesNotHaveStatePropertiesДля генерации кода слой не имеет свойств состояний.
supportedFunctionLayerДля генерации кода слоем не является FunctionLayer объект.

Некоторый тестовый прогон многократно. Эти тесты также проверяют различные типы данных и на совместимость с GPU:

  • predictIsConsistentInType

  • forwardIsConsistentInType

  • backwardIsConsistentInType

Чтобы выполнить функции слоя на графическом процессоре, функции должны поддержать вводы и выводы типа gpuArray с базовым типом данных single.

Выходной слой

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

ТестОписание
forwardLossDoesNotErrorforwardLoss не делает ошибки.
backwardLossDoesNotErrorbackwardLoss не делает ошибки.
forwardLossIsScalarВыход forwardLoss isscalar.
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]
Regression выходПредсказания и цели со значениями в области значений [-1,1]
Classification выход

Предсказания со значениями в области значений [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 синтаксис функций зависит от типа слоя.

  • Z = predict(layer,X) вперед входные данные X через слой и выходные параметры результат Z, где layer имеет один вход, один выход.

  • [Z,state] = predict(layer,X) также выводит обновленный параметр состояния state, где layer имеет один параметр состояния.

Можно настроить синтаксисы для слоев с несколькими входными параметрами, несколькими выходными параметрами или несколькими параметрами состояния:

  • Для слоев с несколькими входными параметрами замените X с X1,...,XN, где N количество входных параметров. NumInputs свойство должно совпадать с N.

  • Для слоев с несколькими выходными параметрами замените Z с Z1,...,ZM, где M количество выходных параметров. NumOutputs свойство должно совпадать с M.

  • Для слоев с несколькими параметрами состояния замените state с state1,...,stateK, где K количество параметров состояния.

Совет

Если количество входных параметров к слою может варьироваться, то используйте varargin вместо X1,…,XN. В этом случае, varargin массив ячеек входных параметров, где varargin{i} соответствует Xi.

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

Совет

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

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

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

forward синтаксис функций зависит от типа слоя:

  • Z = forward(layer,X) вперед входные данные X через слой и выходные параметры результат Z, где layer имеет один вход, один выход.

  • [Z,state] = forward(layer,X) также выводит обновленный параметр состояния state, где layer имеет один параметр состояния.

  • [__,memory] = forward(layer,X) также возвращает значение памяти для пользовательского backward функция с помощью любого из предыдущих синтаксисов. Если слой имеет обоих пользовательский forward функционируйте и пользовательский backward функция, затем прямая функция должна возвратить значение памяти.

Можно настроить синтаксисы для слоев с несколькими входными параметрами, несколькими выходными параметрами или несколькими параметрами состояния:

  • Для слоев с несколькими входными параметрами замените X с X1,...,XN, где N количество входных параметров. NumInputs свойство должно совпадать с N.

  • Для слоев с несколькими выходными параметрами замените Z с Z1,...,ZM, где M количество выходных параметров. NumOutputs свойство должно совпадать с M.

  • Для слоев с несколькими параметрами состояния замените state с state1,...,stateK, где K количество параметров состояния.

Совет

Если количество входных параметров к слою может варьироваться, то используйте varargin вместо X1,…,XN. В этом случае, varargin массив ячеек входных параметров, где varargin{i} соответствует Xi.

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

Совет

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

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

Задайте правильное количество аргументов ввода и вывода в backward.

backward синтаксис функций зависит от типа слоя.

  • dLdX = backward(layer,X,Z,dLdZ,memory) возвращает производные dLdX из потери относительно входа слоя, где layer имеет один вход и один выход. Z соответствует прямому функциональному выходу и dLdZ соответствует производной потери относительно Z. Входной параметр функции memory соответствует выходу memory прямой функции.

  • [dLdX,dLdW] = backward(layer,X,Z,dLdZ,memory) также возвращает производный dLdW из потери относительно настраиваемого параметра, где layer имеет один настраиваемый параметр.

  • [dLdX,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory) также возвращает производный dLdSin из потери относительно входа состояния с помощью любого из предыдущих синтаксисов, где layer имеет один параметр состояния и dLdSout соответствует производной потери относительно состояния слоя выход.

  • [dLdX,dLdW,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory) также возвращает производный dLdW из потери относительно настраиваемого параметра и возвращает производный dLdSin из потери относительно входа состояния слоя с помощью любого из предыдущих синтаксисов, где layer имеет один параметр состояния и один настраиваемый параметр.

Можно настроить синтаксисы для слоев с несколькими входными параметрами, несколькими выходными параметрами, несколькими настраиваемыми параметрами или несколькими параметрами состояния:

  • Для слоев с несколькими входными параметрами замените X и dLdX с X1,...,XN и dLdX1,...,dLdXN, соответственно, где N количество входных параметров.

  • Для слоев с несколькими выходными параметрами замените Z и dLdZ с Z1,...,ZM и dLdZ1,...,dLdZM, соответственно, где M количество выходных параметров.

  • Для слоев с несколькими настраиваемыми параметрами замените dLdW с dLdW1,...,dLdWP, где P количество настраиваемых параметров.

  • Для слоев с несколькими параметрами состояния замените dLdSin и dLdSout с dLdSin1,...,dLdSinK и dLdSout1,...,dLdSoutK, соответственно, где K количество параметров состояния.

Чтобы уменьшать использование памяти путем предотвращения неиспользуемых переменных, являющихся сохраненным между прямым и обратным проходом, замените соответствующие входные параметры на ~.

Совет

Если количество входных параметров к backward может варьироваться, затем использовать varargin вместо входных параметров после layer. В этом случае, varargin массив ячеек входных параметров, где первый N элементы соответствуют N входные параметры слоя, следующий M элементы соответствуют M слой выходные параметры, следующий M элементы соответствуют производным потери относительно M слой выходные параметры, следующий K элементы соответствуют K производные потери относительно K состояния выходные параметры и последний элемент соответствуют memory.

Если количество выходных параметров может варьироваться, то используйте varargout вместо выходных аргументов. В этом случае, varargout массив ячеек выходных параметров, где первый N элементы соответствуют N производные потери относительно N входные параметры слоя, следующий P элементы соответствуют производным потери относительно P настраиваемые параметры и следующий K элементы соответствуют производным потери относительно K входные параметры состояния.

Совет

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

  • dLdX = backward(layer,X,Z,dLdZ,memory) возвращает производные dLdX из потери относительно входа слоя, где layer имеет один вход и один выход. Z соответствует прямому функциональному выходу и dLdZ соответствует производной потери относительно Z. Входной параметр функции memory соответствует выходу memory прямой функции.

  • [dLdX,dLdW] = backward(layer,X,Z,dLdZ,memory) также возвращает производный dLdW из потери относительно настраиваемого параметра, где layer имеет один настраиваемый параметр.

  • [dLdX,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory) также возвращает производный dLdSin из потери относительно входа состояния с помощью любого из предыдущих синтаксисов, где layer имеет один параметр состояния и dLdSout соответствует производной потери относительно состояния слоя выход.

  • [dLdX,dLdW,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory) также возвращает производный dLdW из потери относительно настраиваемого параметра и возвращает производный dLdSin из потери относительно входа состояния слоя с помощью любого из предыдущих синтаксисов, где layer имеет один параметр состояния и один настраиваемый параметр.

Можно настроить синтаксисы для слоев с несколькими входными параметрами, несколькими выходными параметрами, несколькими настраиваемыми параметрами или несколькими параметрами состояния:

  • Для слоев с несколькими входными параметрами замените X и dLdX с X1,...,XN и dLdX1,...,dLdXN, соответственно, где N количество входных параметров.

  • Для слоев с несколькими выходными параметрами замените Z и dLdZ с Z1,...,ZM и dLdZ1,...,dLdZM, соответственно, где M количество выходных параметров.

  • Для слоев с несколькими настраиваемыми параметрами замените dLdW с dLdW1,...,dLdWP, где P количество настраиваемых параметров.

  • Для слоев с несколькими параметрами состояния замените dLdSin и dLdSout с dLdSin1,...,dLdSinK и dLdSout1,...,dLdSoutK, соответственно, где K количество параметров состояния.

Чтобы уменьшать использование памяти путем предотвращения неиспользуемых переменных, являющихся сохраненным между прямым и обратным проходом, замените соответствующие входные параметры на ~.

Совет

Если количество входных параметров к backward может варьироваться, затем использовать varargin вместо входных параметров после layer. В этом случае, varargin массив ячеек входных параметров, где первый N элементы соответствуют N входные параметры слоя, следующий M элементы соответствуют M слой выходные параметры, следующий M элементы соответствуют производным потери относительно M слой выходные параметры, следующий K элементы соответствуют K производные потери относительно K состояния выходные параметры и последний элемент соответствуют memory.

Если количество выходных параметров может варьироваться, то используйте varargout вместо выходных аргументов. В этом случае, varargout массив ячеек выходных параметров, где первый N элементы соответствуют N производные потери относительно N входные параметры слоя, следующий P элементы соответствуют производным потери относительно P настраиваемые параметры и следующий K элементы соответствуют производным потери относительно K входные параметры состояния.

Производные 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.

Сопоставимые типы данных и совместимость с GPU

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

Если слой вперед функции полностью поддерживает dlarray объекты, затем слоем является совместимый графический процессор. В противном случае, чтобы быть совместимым графическим процессором, функции слоя должны поддержать входные параметры и возвратить выходные параметры типа gpuArray (Parallel Computing Toolbox).

Многие MATLAB® поддержка встроенных функций gpuArray (Parallel Computing Toolbox) и dlarray входные параметры. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray. Для списка функций, которые выполняются на графическом процессоре, смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox). Чтобы использовать графический процессор для глубокого обучения, у вас должно также быть поддерживаемое устройство графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Для получения дополнительной информации о работе с графическими процессорами в MATLAB смотрите, что графический процессор Вычисляет в MATLAB (Parallel Computing Toolbox).

Промежуточные Слои.  Тесты 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.

Допустимые состояния

Для слоев со свойствами состояний, тест predictReturnsValidStates проверки, что предсказать функция возвращает допустимые состояния. Когда forward задан, тест forwardReturnsValidStates проверки, что прямая функция возвращает допустимые состояния. Тест resetStateDoesNotError проверки, что resetState функция возвращает слой с допустимыми свойствами состояний.

Тестовая диагностикаОписаниеВозможное решение
Error using 'predict' in Layer. 'State' must be real-values numeric array or unformatted dlarray object.Выходные параметры состояния должны быть числовыми массивами с действительным знаком или восстановили после форматирования dlarray объекты.Убедитесь, что состояния идентифицированы в Framework Diagnostic числовые массивы с действительным знаком или восстановили после форматирования dlarray объекты.
Error using 'resetState' in Layer. 'State' must be real-values numeric array or unformatted dlarray objectСвойства состояний возвращенного слоя должны быть числовыми массивами с действительным знаком или восстановили после форматирования dlarray объекты.

Совместимость генерации кода

Если вы устанавливаете CheckCodegenCompatibility опция к 1 (TRUE), затем checkLayer функционируйте проверяет слой на совместимость генерации кода.

Тест codegenPragmaDefinedInClassDef проверки, что определение слоя содержит прагму генерации кода %#codegen. Тест checkForSupportedLayerPropertiesForCodegen проверки, что свойства слоя поддерживают генерацию кода. Тест predictIsValidForCodegeneration проверки, что выходные параметры predict сопоставимы в размерности и обрабатывают размер в пакетном режиме.

Генерация кода поддерживает промежуточные слои с 2D изображением или входом функции только. Генерация кода не делает уровней поддержки со свойствами состояний (свойства с атрибутом State).

checkLayer функция не проверяет, что эти функции, используемые слоем, совместимы с генерацией кода. Чтобы проверять эти функции, используемые пользовательским слоем также, поддерживают генерацию кода, сначала используют приложение Code Generation Readiness. Для получения дополнительной информации смотрите Проверку кода при помощи Инструмента Готовности Генерации кода (MATLAB Coder).

Тестовая диагностикаОписаниеВозможное решение
Specify '%#codegen' in the class definition of custom layerОпределение слоя не включает прагму "%#codegen" для генерации кода.

Добавьте %#codegen директива (или прагма) к вашему определению слоя, чтобы указать, что вы намереваетесь сгенерировать код для этого слоя. Добавление этой директивы дает Анализатору кода 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Слой содержит скалярные свойства типа кроме числового, логического, или строка.

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

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

Смотрите также

|

Похожие темы