cnncodegen

Сгенерируйте код и создайте статическую библиотеку для Ряда или Сети DAG

Синтаксис

cnncodegen(net,'targetlib',libraryname)
cnncodegen(net,'targetlib',libraryname,Name,Value)

Описание

cnncodegen(net,'targetlib',libraryname) генерирует Код С++ и создает статическую библиотеку для заданного сетевого объекта и целевую библиотеку при помощи значений по умолчанию для всех свойств.

пример

cnncodegen(net,'targetlib',libraryname,Name,Value) генерирует Код С++ и создает статическую библиотеку для заданного сетевого объекта и целевую библиотеку с опциями генерации дополнительного кода, заданными одним или несколькими аргументами пары Name,Value.

Примеры

свернуть все

Используйте cnncodegen, чтобы сгенерировать Код С++ для предварительно обученной сети для развертывания на процессоре ARM.

Получите предварительно обученную модель AlexNet при помощи функции alexnet. Эта функция требует Модели Deep Learning Toolbox™ для Сети AlexNet. Если вы не установили этот пакет поддержки, функция обеспечивает ссылку на загрузку. Также см. Модель Deep Learning Toolbox для Сети AlexNet.

net = alexnet;

Сгенерируйте код при помощи cnncodegen с набором 'targetlib' к 'arm-compute'. Для 'arm-compute' необходимо обеспечить параметр 'ArmArchitecture'.

cnncodegen(net,'targetlib','arm-compute','targetparams',struct('ArmComputeVersion','18.05','ArmArchitecture','armv8'));

Сгенерируйте Код С++ CUDA® от объекта SeriesNetwork, созданного для архитектуры YOLO, обученной классификации набора данных PASCAL. Этот пример требует продукта GPU Coder™ и Интерфейса GPU Coder для Библиотек Глубокого обучения.

Получите предварительно обученную сеть YOLO и преобразуйте ее в объект SeriesNetwork.

url = 'https://www.mathworks.com/supportfiles/gpucoder/cnn_models/Yolo/yolonet.mat';
websave('yolonet.mat',url);
net = coder.loadDeepLearningNetwork('yolonet.mat');

Объект SeriesNetwork net содержит 58 слоев. Эти слои являются слоями свертки, сопровождаемыми текучим ReLU и полносвязными слоями в конце сетевой архитектуры. Можно использовать net.Layers, чтобы видеть все слои в этой сети.

Используйте функцию cnncodegen, чтобы сгенерировать код CUDA.

cnncodegen(net,'targetlib','cudnn');

Генератор кода генерирует .cu и заголовочные файлы в папке '/pwd/codegen'. Серийная сеть сгенерирована как класс C++ под названием CnnMain, содержа массив 58 классов слоя. Метод setup() этого класса настраивает указатели и выделяет ресурсы для каждого расположенного на слое объекта. Метод predict() вызывает прогноз для каждого из этих 58 слоев в сети. Метод cleanup() выпускает все ресурсы памяти и системные ресурсы, выделенные для каждого расположенного на слое объекта. Все бинарные веса (cnn_**_w) и файлы смещения (cnn_**_b) для слоев свертки сети хранятся в папке codegen. Файлы скомпилированы в статическую библиотеку cnnbuild.a (на Linux®) или cnnbuild.lib (на Windows®).

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

свернуть все

Объект Pretrained SeriesNetwork или DAGNetwork.

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

ЗначениеОписание
'arm-compute'

Цель процессор CPU ARM®, поддерживающий инструкции NEON при помощи ARM, Вычисляет Библиотеку для компьютерного зрения и машинного обучения.

Требует MATLAB® Coder™ Interface для библиотек глубокого обучения.

'cudnn'

Предназначайтесь для NVIDIA® графические процессоры при помощи библиотеки CUDA Deep Neural Network (cuDNN).

Требует продукта GPU Coder и Интерфейса GPU Coder для Библиотек Глубокого обучения.

'mkldnn'

Предназначайтесь для процессора CPU Intel® при помощи Math Kernel Library Intel для Глубоких нейронных сетей (MKL-DNN).

Требует интерфейса MATLAB Coder для библиотек глубокого обучения.

'tensorrt'

Предназначайтесь для NVIDIA графические процессоры при помощи NVIDIA TensorRT™, высокоэффективного оптимизатора вывода глубокого обучения и библиотеки времени выполнения.

Требует продукта GPU Coder и Интерфейса GPU Coder для Библиотек Глубокого обучения.

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: cnncodegen(net,'targetlib','mkldnn','codegenonly',0,'batchsize',1) генерирует Код С++ для процессора Intel при помощи MKL-DNN и создает статическую библиотеку для сетевого объекта в net.

Общие опции

свернуть все

Положительное ненулевое целочисленное значение, задающее количество наблюдений, чтобы работать с в одном вызове метода сети predict(). При вызове network->predict() размер входных данных должен совпадать со значением batchsize, заданным во время cnncodegen.

Если libraryname является 'arm-compute', значением batchsize должен быть 1.

Булев флаг, который, когда включено, генерирует код CUDA, не генерируя и создавая make-файл.

Специфичные для библиотеки параметры, заданные как 1-by-1 структура, содержащая поля, описаны в этих таблицах.

Параметры для ARM вычисляют библиотеку

Поле

Описание

ArmComputeVersion

Версия ARM Вычисляет Библиотеку по целевому компьютеру, заданному как '18.03' или '18.05'. Значением по умолчанию является '18.05'. Если вы устанавливаете ArmComputeVersion на версию позже, чем '18.05', ArmComputeVersion установлен в '18.05'

ArmArchitecture

Архитектура ARM поддержана на целевом компьютере, заданном как 'armv7 или 'armv8'. Заданная архитектура должна быть эквивалентной, архитектура для ARM Вычисляют Библиотеку по целевому компьютеру.

ArmArchitecture является обязательным параметром.

Параметры для библиотеки NVIDIA cuDNN

Поле

Описание

AutoTuning

Включите или отключите автоматическую настраивающую опцию. Включение автоматической настройки позволяет cuDNN библиотеке находить самые быстрые алгоритмы свертки. Это увеличивает производительность для больших сетей, таких как SegNet и ResNet. Значением по умолчанию является true.

Примечание

Если AutoTuning включен для целей TensorRT, программное обеспечение генерирует код с автоматической отключенной настройкой. Это делает так, не генерируя предупреждающих сообщений или сообщений об ошибке.

Параметры для библиотеки NVIDIA TensorRT

Поле

Описание

DataType

Задайте точность входа типа данных тензора к сети или тензору вывод слоя. При выполнении вывода в 32-битных плаваниях используйте 'FP32'. Для 8-битного целого числа используйте 'INT8'. Для полуточности Значением по умолчанию 'FP16' использования является 'FP32'.

Аргумент computecapability должен быть установлен в '7.0' или выше если DataType установлен в 'FP16'.

Аргумент computecapability должен быть установлен в '6.1' или выше если DataType установлен в 'INT8'. Вычислите возможность 6,2, не поддерживает точность INT8.

DataPath

Местоположение набора данных изображений используется во время перекалибровки. Значением по умолчанию является ''. Эта опция применима только, когда DataType установлен в 'INT8'.

Когда вы выбираете опцию 'INT8', TensorRT квантует данные с плавающей точкой к int8. Перекалибровка выполняется с уменьшаемым набором калибровочных данных. Калибровочные данные должны присутствовать в месте данных изображения, заданном DataPath.The, изображения должны быть в папках, имена которых соответствуют меткам для изображений.

NumCalibrationBatches

Числовое значение, задающее пакетный размер для калибровки. Это значение не должно быть больше, чем количество изображений, существующих в наборе данных изображений. Эта опция применима только, когда DataType установлен в 'INT8'.

Опции графического процессора (только GPU Coder)

свернуть все

Это свойство влияет на графический процессор, предназначающийся только.

Вектор символов, задающий графический процессор NVIDIA, вычисляет возможность скомпилировать для. Аргумент берет формат major#.minor#. Возможными значениями является '3.2'|'3.5'|'3.7'|'5.0'|'5.2'|'5.3'|'6.0'|'6.1'|'6.2'|'7.0'|'7.1'|'7.2'.

Это свойство влияет на графический процессор, предназначающийся только.

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

ЗначениеОписание
'host'Предназначайтесь для устройства графического процессора на хост-машине.
'tk1'

Предназначайтесь для платы NVIDIA Tegra® Tk1.

Эта опция требует набора инструментальных средств Linaro GCC и поддерживается только на платформе Linux. Для получения информации о подготовке набора инструментальных средств Linaro смотрите Переменные окружения.

'tx1'

Предназначайтесь для платы NVIDIA Tegra TX1.

Эта опция требует набора инструментальных средств Linaro GCC и поддерживается только на платформе Linux. Для получения информации о подготовке набора инструментальных средств Linaro смотрите Переменные окружения.

'tx2'

Предназначайтесь для платы NVIDIA Tegra TX2.

Эта опция требует набора инструментальных средств Linaro GCC и поддерживается только на платформе Linux. Для получения информации о подготовке набора инструментальных средств Linaro смотрите Переменные окружения.

Введенный в R2017b