exponenta event banner

checkLayer

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

Описание

пример

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

пример

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

Примеры

свернуть все

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

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

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

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

layer = preluLayer(20,'prelu');
validInputSize = [5 5 20];
checkLayer(layer,validInputSize)
Skipping multi-observation tests. To enable tests with multiple observations, specify the 'ObservationDimension' option.
For 2-D image data, set 'ObservationDimension' to 4.
For 3-D image data, set 'ObservationDimension' to 5.
For sequence data, set 'ObservationDimension' to 2.
 
Skipping GPU tests. No compatible GPU device found.
 
Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the 'CheckCodegenCompatibility' and 'ObservationDimension' options.
 
Running nnet.checklayer.TestLayerWithoutBackward
.........
Done nnet.checklayer.TestLayerWithoutBackward
__________

Test Summary:
	 9 Passed, 0 Failed, 0 Incomplete, 13 Skipped.
	 Time elapsed: 0.12426 seconds.

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

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

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

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

layer = preluLayer(20,'prelu');
validInputSize = [5 5 20];
checkLayer(layer,validInputSize,'ObservationDimension',4)
Skipping GPU tests. No compatible GPU device found.
 
Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the 'CheckCodegenCompatibility' and 'ObservationDimension' options.
 
Running nnet.checklayer.TestLayerWithoutBackward
.......... ...
Done nnet.checklayer.TestLayerWithoutBackward
__________

Test Summary:
	 13 Passed, 0 Failed, 0 Incomplete, 9 Skipped.
	 Time elapsed: 0.047134 seconds.

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

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

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

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

Пример: [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. Дополнительные сведения см. в разделе Размеры вводимых слоев.

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

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

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

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

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

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

Подробнее

свернуть все

Размеры входных данных слоев

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

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

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

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

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

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

Ввод слоевРазмер вводаИзмерение наблюдения
2-D изображенияh-by-w-c-by-N, где h, w и c соответствуют высоте, ширине и количеству каналов изображений соответственно, а N - количество наблюдений.4
3-D изображенияh-by-w-d-by-c-by-N, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов 3-D изображений соответственно, а N - количество наблюдений.5
Векторные последовательностиc-by-N-by-S, где c - число признаков последовательностей, N - число наблюдений, а S - длина последовательности.2
2-D последовательности изображенийh-by-w-c-by-N-by-S, где h, w и c соответствуют высоте, ширине и количеству каналов изображений, соответственно, N - количество наблюдений, а S - длина последовательности.4
3-D последовательности изображенийh-by-w-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-by-1-by-K-by-N, где K - число классов, а N - число наблюдений.4
3-D классификация изображений1-by-1-by-1-by-K-by-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-by-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-by-1-by-1-by-R-by-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 не указан, производные можно вычислить с помощью автоматической дифференциации.
codegenPragmaDefinedInClassDefpragma "%#codegen" для генерации кода указывается в файле класса.
checkForSupportedLayerPropertiesForCodegenСвойства слоя поддерживают создание кода.
predictIsValidForCodeGenerationpredict действителен для создания кода.

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

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

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

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

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

backwardLossIsConsistentInType

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

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

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

Представлен в R2018a