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