checkLayer

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

Описание

пример

checkLayer(layer,validInputSize) проверяет валидность пользовательского слоя, используя сгенерированные данные размеров в validInputSize. Для слоев с одним входом задайте validInputSize к типовому размеру входных данных для слоя. Для слоев с несколькими входами задайте validInputSize массиву ячеек типичных размеров, где каждый элемент соответствует входу слоя.

пример

checkLayer(layer,validInputSize,Name,Value) задает дополнительные опции, используя одну или несколько пары "имя-значение".

Примеры

свернуть все

Проверьте валидность пользовательского слоя 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.

В этом случае функция не обнаруживает никаких проблем со слоем.

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

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

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

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

layer = codegenPreluLayer(20,'prelu');
validInputSize = [24 24 20];
checkLayer(layer,validInputSize,'ObservationDimension',4,'CheckCodegenCompatibility',true)
Skipping GPU tests. No compatible GPU device found.
 
Running nnet.checklayer.TestLayerWithoutBackward
.......... ........
Done nnet.checklayer.TestLayerWithoutBackward
__________

Test Summary:
	 18 Passed, 0 Failed, 0 Incomplete, 4 Skipped.
	 Time elapsed: 0.53879 seconds.

Функция не обнаруживает проблем со слоем.

Входные параметры

свернуть все

Пользовательский слой, заданный как nnet.layer.Layer объект, nnet.layer.ClassificationLayer объект, или nnet.layer.RegressionLayer объект. Для примера, показывающего, как задать свой собственный пользовательский слой, смотрите Задать Пользовательский Слой Глубокого Обучения с Настраиваемыми параметрами.

checkLayer функция не поддерживает слои, наследующие от nnet.layer.Formattable.

Допустимые входные размеры слоя, заданные как вектор положительных целых чисел или массив ячеек векторов положительных целых чисел.

  • Для слоев с одним входом задайте validInputSize как вектор целых чисел, соответствующих размерностям входных данных. Для примера, [5 5 10] соответствует действительным входным данным размера 5 на 5 на 10.

  • Для слоев с несколькими входами задайте validInputSize как массив ячеек векторов, где каждый вектор соответствует слою входу, а элементы векторов соответствуют размерностям соответствующих входных данных. Для примера, {[24 24 20],[24 24 10]} соответствует действительным размерам входа двух входов, где 24 на 24 на 20 - действительный размер входа для первого входа, и 24 на 24 на 10 - действительный размер входа для второго входа.

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

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

Пример: [5 5 10]

Пример: {[24 24 20],[24 24 10]}

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | cell

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'ObservationDimension',4 устанавливает размерность наблюдения равным 4

Размерность наблюдения, заданная как разделенная разделенными запятой парами, состоящая из 'ObservationDimension' и положительное целое число.

Размерность наблюдения определяет, какая размерность входных данных слоя соответствует наблюдениям. Например, если слой ожидает, что входные данные имеют размер h -by- w -by- c -by- N, где h, w и c соответствуют высоте, ширине и количеству каналов входных данных, соответственно, и N соответствует количеству наблюдений, то размерность наблюдения равна 4. Для получения дополнительной информации смотрите Слой Входа Sizes.

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Флаг для включения тестов генерации кода, заданный как разделенная разделенными запятой парами, состоящая из 'CheckCodegenCompatibility' и true или false.

Если 'CheckCodegenCompatibility' является true, затем необходимо задать 'ObservationDimension' опция.

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

Типы данных: logical

Подробнее о

свернуть все

Входные размеры слоя

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

Промежуточные слои

Для промежуточных слоев (слоев типа nnet.layer.Layer), допустимый размер входа и размерность наблюдения зависят от типа данных, вводимых в слой.

  • Для слоев с одним входом задайте validInputSize как вектор целых чисел, соответствующих размерностям входных данных.

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

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

Вход слояВход сигналаРазмерность наблюдения
2-D изображенияh -by- w -by- c -by- N, где h, w и c соответствуют высоте, ширине и количеству каналов изображений, соответственно, а N - количеству наблюдений.4
3-D изображения<reservedrangesplaceholder9>-by-<reservedrangesplaceholder8>-by-<reservedrangesplaceholder7>-by-<reservedrangesplaceholder6>-by-<reservedrangesplaceholder5>, где h, w, d, и c соответствуют высоте, ширине, глубине, и количество каналов 3D изображений, соответственно, и N - количество наблюдений.5
Векторные последовательностиc -by- N -by- S, где c - количество функций последовательностей, N - количество наблюдений, а S - длина последовательности.2
2-D последовательности изображенийh -by- w -by- c -by- N -by- S, где h, w и c соответствуют высоте, ширине и количеству каналов изображений, соответственно, N является количеством наблюдений, а S - длиной последовательности.4
3-D последовательности изображенийh -by- w -by- d -by- c -by- N -by- S, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов 3-D изображений, соответственно, N количество наблюдений, а S - длина последовательности.5

Для примера, для 2-D задач классификации изображений, установите validInputSize на [h w c], где h, w, и c соответствуют высоте, ширине и количеству каналов изображений, соответственно и 'ObservationDimension' на 4.

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

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

Для выходных слоев (слоев типа nnet.layer.ClassificationLayer или nnet.layer.RegressionLayer), установите validInputSize к типовому размеру одной входной Y наблюдения к слою.

Для задач классификации, допустимого размера входа и размерности наблюдения Y зависят от типа задачи:

Задача классификацииВход сигналаРазмерность наблюдения
2-D классификации изображений1 на 1-by - K -by - N, где K - количество классов, а N - количество наблюдений.4
3-D классификации изображений1 на 1 на 1 K N, где K количество классов и N, является количеством наблюдений.5
Классификация от последовательности до меткиK -by - N, где K - количество классов, а N - количество наблюдений.2
Классификация последовательность-последовательностьK -by- N -by- S, где K - количество классов, N - количество наблюдений, а S - длина последовательности.2

Для примера, для 2-D задач классификации изображений, установите validInputSize на [1 1 K], где K количество классов и 'ObservationDimension' на 4.

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

Регрессионная задачаВход сигналаРазмерность наблюдения
2-D регрессию изображения1 на 1-by - R -by - N, где R - количество откликов, а N - количество наблюдений.4
2-D регрессию «изображение-изображение»h -by- w -by- c -by- N, где h, w и c являются высотой, шириной и количеством каналов выхода соответственно, и N является количеством наблюдений.4
3-D регрессию изображения1 на 1 на 1 R N, где R количество ответов и N, является количеством наблюдений.5
3-D регрессию «изображение-изображение»h -by- w -by- d -by- c -by- N, где h, w, d и c являются высотой, шириной, глубиной и количеством каналов выхода соответственно, и N является количеством наблюдений.5
Регрессия от последовательности к единицеR -by - N, где R - количество откликов, а N - количество наблюдений.2
Регрессия от последовательности к последовательностиR -by- N -by- S, где R - количество откликов, N - количество наблюдений, а S - длина последовательности.2

Для примера, для 2-D задач регрессии изображений, установите validInputSize на [1 1 R], где R количество ответов и 'ObservationDimension' на 4.

Алгоритмы

свернуть все

Список тестов

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

Введенный в R2018a