Сгенерируйте код для нейронной сети для глубокого обучения, чтобы предназначаться для графического процессора ARM Mali
cnncodegen(
генерирует Код С++ для заданного сетевого объекта при помощи Библиотеки ARM® Compute для Мали графические процессоры.net
,'targetlib','arm-compute-mali')
Требует продукта GPU Coder™ и Интерфейса GPU Coder для Библиотек Глубокого обучения.
cnncodegen(
генерирует Код С++ для заданного сетевого объекта при помощи ARM, Вычисляют Библиотеку для Мали графические процессоры с опциями генерации дополнительного кода.net
,'targetlib','arm-compute-mali',targetparams
)
Использование cnncodegen
сгенерировать Код С++ для предварительно обученной сети для развертывания на ARM графический процессор Мали.
Получите предварительно обученную модель GoogLeNet при помощи googlenet
(Deep Learning Toolbox) функция. Эта функция требует Модели Deep Learning Toolbox™ для Сети GoogLeNet. Если вы не установили этот пакет поддержки, функция обеспечивает ссылку на загрузку. В качестве альтернативы см. https://www.mathworks.com/matlabcentral/fileexchange/64456-deep-learning-toolbox-model-for-googlenet-network.
net = googlenet;
Сгенерируйте код при помощи cnncodegen
с 'targetlib'
установите на 'arm-compute-mali'
. По умолчанию генератор кода предназначается для версии '19.05'
из ARM. Чтобы предназначаться для различной версии Вычислить Библиотеки, используйте 'ArmComputeVersion'
параметр.
cnncodegen(net,'targetlib','arm-compute-mali'... ,'targetparams',struct('ArmComputeVersion','19.02'));
------------------------------------------------------------------------ Compilation suppressed: generating code only. ------------------------------------------------------------------------ ### Codegen Successfully Generated for arm device
Генератор кода генерирует .cpp
и заголовочные файлы в '/pwd/codegen'
папка. Сеть DAG сгенерирована как класс C++ под названием CnnMain
, содержа массив 87 классов слоя. Генератор кода сокращает количество слоев, оптимизацией сплава слоя слоев нормализации партии. и сверточных. setup()
метод этого класса настраивает указатели и выделяет ресурсы для каждого расположенного на слое объекта. predict()
метод вызывает предсказание для каждого из этих 87 слоев в сети. cleanup()
метод выпускает все ресурсы памяти и системные ресурсы, выделенные для каждого расположенного на слое объекта. Все бинарные веса (cnn_**_w
) и файлы смещения (cnn_**_b
) поскольку слои свертки сети хранятся в codegen
папка.
Чтобы создать библиотеку, переместите сгенерированный код в целевую платформу ARM и используйте сгенерированный make-файл cnnbuild_rtw.mk
.
net
— Предварительно обученный объект нейронной сети для глубокого обученияПредварительно обученный SeriesNetwork
или DAGNetwork
объект.
Примечание
cnncodegen
не поддерживает dlnetwork
объекты.
targetparams
— Специфичные для библиотеки параметрыARM Вычисляет Специфичные для библиотеки параметры, заданные как 1
- 1
структура, содержащая поля, описана в этих таблицах.
Поле | Описание |
---|---|
ArmComputeVersion | Версия ARM Вычисляет Библиотеку по целевому компьютеру в виде |
Предупреждает запуск в R2021a
В будущем релизе, cnncodegen
функция сгенерирует Код С++ и make-файлы, чтобы создать статическую библиотеку только для ARM процессор GPU Мали. Можно продолжить использовать 'arm-compute-mali'
значение для 'targetlib'
аргумент, чтобы предназначаться для графического процессора ARM Mali при помощи ARM Вычисляет Библиотеку для компьютерного зрения и машинного обучения.
Для всех других целей используйте codegen
команда. Напишите функцию точки входа в MATLAB®, который использует coder.loadDeepLearningNetwork
функционируйте, чтобы загрузить модель глубокого обучения и вызовы predict
(Deep Learning Toolbox), чтобы предсказать ответы. Например,
function out = googlenet_predict(in) %#codegen persistent mynet; if isempty(mynet) mynet = coder.loadDeepLearningNetwork('googlenet'); end % pass in input out = predict(mynet,in);
Эта таблица показывает некоторые типичные использования cnncodegen
и как обновить ваш код, чтобы использовать codegen
вместо этого.
Целевой рабочий процесс | Не рекомендуемый | Рекомендуемый |
---|---|---|
Процессор ARM CPU, поддерживающий | Установите cnncodegen(net,'targetlib'... ,'arm-compute','targetparams' ... ,struct('ArmComputeVersion'... ,'19.02','ArmArchitecture'... ,'armv8')) Другие поддерживаемые версии ARM Вычисляют Библиотеку, Можно задать архитектуру ARM как | Создайте cfg = coder.config('lib'); cfg.TargetLang = 'C++'; Создайте dlcfg = coder.DeepLearningConfig ... ('arm-compute'); dlcfg.ArmArchitecture = 'armv8'; dlcfg.ArmComputeVersion = '19.02'; cfg.DeepLearningConfig = dlcfg; Используйте arg = {ones(224,224,3,'single')}; codegen -args arg ... -config cfg googlenet_predict Для получения дополнительной информации смотрите, что Генерация кода для Нейронных сетей для глубокого обучения с ARM Вычисляет Библиотеку. |
NVIDIA® графические процессоры при помощи библиотеки CUDA® Deep Neural Network (cuDNN) | Установите cnncodegen(net,'targetlib'... ,'cudnn','ComputeCapability'... ,'7.0','targetparams' ... ,struct('AutoTuning',true ... ,'DataType','INT8'... ,'CalibrationResultFile' ... 'myInt8Cal.mat')) Автоматическая настраивающая функция позволяет cuDNN библиотеке находить самые быстрые алгоритмы свертки.
| Создайте cfg = coder.gpuConfig('lib'); cfg.TargetLang = 'C++'; Чтобы установить минимум вычисляют возможность генерации кода, используют cfg.GpuConfig.ComputeCapability = '7.0';
Создайте dlcfg = coder.DeepLearningConfig('cudnn'); dlcfg.AutoTuning = true; dlcfg.DataType = 'int8'; dlcfg.CalibrationResultFile = 'myInt8Cal.mat'; cfg.DeepLearningConfig = dlcfg; Используйте arg = {ones(224,224,3,'single')}; codegen -args arg ... -config cfg googlenet_predict Для получения дополнительной информации смотрите Генерацию кода для Нейронных сетей для глубокого обучения при помощи cuDNN. |
Процессор CPU Intel® | Чтобы использовать Math Kernel Library Intel для Глубоких нейронных сетей (MKL-DNN) для центральных процессоров Intel, установите cnncodegen(net,'targetlib'... ,'mkldnn'); | Создайте cfg = coder.config('lib'); cfg.TargetLang = 'C++'; Создайте dlcfg = coder.DeepLearningConfig... ('mkldnn'); cfg.DeepLearningConfig = dlcfg; Используйте arg = {ones(224,224,3,'single')}; codegen -args arg ... -config cfg googlenet_predict Для получения дополнительной информации смотрите Генерацию кода для Нейронных сетей для глубокого обучения с MKL-DNN. |
NVIDIA графические процессоры при помощи NVIDIA TensorRT™, высокоэффективного оптимизатора вывода глубокого обучения и библиотеки времени выполнения | Установите cnncodegen(net,'targetlib'... ,'tensorrt','ComputeCapability'... ,'7.0','targetparams' ... ,struct('DataType','INT8' ... 'DataPath','image_dataset'... ,'NumCalibrationBatches',50)) | Создайте cfg = coder.gpuConfig('lib'); cfg.TargetLang = 'C++'; Чтобы установить минимум вычисляют возможность генерации кода, используют cfg.GpuConfig.ComputeCapability = '7.0';
Создайте dlcfg = coder.DeepLearningConfig... ('cudnn'); dlcfg.DataType = 'int8'; dlcfg.DataPath = 'image_dataset'; dlcfg.NumCalibrationBatches = 50; cfg.DeepLearningConfig = dlcfg; Используйте arg = {ones(224,224,3,'single')}; codegen -args arg ... -config cfg googlenet_predict Для получения дополнительной информации см. Предсказание Глубокого обучения при помощи NVIDIA TensorRT. |
Общие опции | Сгенерируйте код, не генерируя и создавая make-файл. Например, cnncodegen(net,'targetlib' ... ,'mkldnn','codegenonly',1); | К продуктам исходный код, не вызывая сделать команду или объектный код сборки, используйте cfg = coder.codeConfig('lib');
cfg.GenCodeOnly = true;
|
Определение графического процессора NVIDIA вычисляет возможность скомпилировать для. Аргумент берет формат cnncodegen(net,'targetlib'... ,'cudnn','ComputeCapability','7.0'); | Чтобы установить минимум вычисляют возможность генерации кода, используют cfg = coder.gpuConfig('lib'); cfg.GpuConfig.ComputeCapability = '7.0'; |
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.