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

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

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

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

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

Задайте пользовательский слой PReLU. Чтобы создать этот слой, сохраните файл preluLayer.m в текущей папке.

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

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

layer = preluLayer(20,'prelu');
validInputSize = [5 5 20];
checkLayer(layer,validInputSize)
Skipping multi-observation tests. To enable tests with multiple observations, specify the 'ObservationDimension' option.
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-на-w-на-c-на-N, где h, w и c - высота, ширина и количество каналов, соответственно, и N - количество наблюдений.

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

layer = preluLayer(20,'prelu');
validInputSize = [5 5 20];
checkLayer(layer,validInputSize,'ObservationDimension',4)
Skipping GPU tests. No compatible GPU device found.
 
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 не задан, производные могут быть вычислены с помощью автоматической дифференциации.
codegenPragmaDefinedInClassDefПрагма- "%#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 не задан, производные могут быть вычислены с помощью автоматической дифференциации.

The 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 количество настраиваемых параметров.

Совет

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

Для получения дополнительной информации смотрите Слой Входа Sizes.

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

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

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

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

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

Совет

Если функции слоя forward поддержки 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:The 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.

Совет

Если функции слоя forward поддержки 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

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

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

Многие MATLAB® поддержка встроенных функций gpuArray (Parallel Computing Toolbox) и dlarray входные параметры. Список функций, поддерживающих dlarray объекты, см. Список функций с поддержкой dlarray. Список функций, которые выполняются на графическом процессоре, см. в разделе Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox). Для использования графический процессор для глубокого обучения необходимо иметь также поддерживаемое графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Для получения дополнительной информации о работе с графическими процессорами в MATLAB, смотрите GPU Computing в 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'.Тип производной от потери настраиваемых параметров должен соответствовать соответствующим настраиваемым параметрам.

Для каждого настраиваемого параметра верните производную с тем же типом, что и соответствующий настраиваемый параметр.

Совет

Если функции слоя forward поддержки 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 функция задана, производная неправильно вычислена

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

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

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

Совет

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

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

Преобразуйте некалярные свойства в использование представления типа single, double или символьный массив.

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

См. также

|

Похожие темы