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. Эта функция требует Глубокого Изучения Модели Toolbox™ для Сети AlexNet. Если вы не установили этот пакет поддержки, функция обеспечивает ссылку на загрузку. Также смотрите Глубоко Изучение Модели Тулбокса для Сети AlexNet.

net = alexnet;

Сгенерируйте код при помощи cnncodegen с опцией 'targetlib'.

cnncodegen(net,'targetlib','arm-compute');

Сгенерируйте Код С++ CUDA® от объекта SeriesNetwork, созданного для архитектуры YOLO, обученной классификации набора данных PASCAL. Этот пример требует продукта Coder™ GPU и Интерфейса 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'

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

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

'cudnn'

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

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

'mkldnn'

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

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

'tensorrt'

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

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

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

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

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

Общие опции

свернуть все

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

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

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

Опции GPU (только GPU Coder)

свернуть все

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

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

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

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

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

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

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

'tx1'

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

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

'tx2'

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

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

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

Эта опция содержит дополнительные параметры для предназначения для библиотеки NVIDIA TensorRT, заданной как 1-by-1 структура, содержащая эти поля:

Поле

Описание

Тип данных

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

DataPath

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

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

NumCalibrationBatches

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

Введенный в R2017b

Была ли эта тема полезной?