Глубокое обучение использует архитектуры нейронных сетей, которые содержат множество уровней обработки, включая сверточные уровни. Модели глубокого обучения обычно работают с большими наборами помеченных данных. Выполнение вывода по этим моделям является вычислительной интенсивностью, требующей значительного объема памяти. Нейронные сети используют память для хранения входных данных, параметров (весов) и активаций от каждого уровня по мере распространения входных данных по сети. В сетях Deep Neural, обученных работе с MATLAB ®, используются типы данных с плавающей запятой с одинарной точностью. Даже сети небольшого размера требуют значительного объема памяти и оборудования для выполнения этих арифметических операций с плавающей запятой. Эти ограничения могут препятствовать развертыванию моделей глубокого обучения на устройствах с низкой вычислительной мощностью и меньшими ресурсами памяти. Использование более низкой точности для хранения весов и активизаций позволяет уменьшить требования к памяти сети.
Вы можете использовать Deep Learning Toolbox™ совместно с пакетом поддержки Deep Learning Toolbox Model Quantization Library для уменьшения занимаемой памяти глубокой нейронной сети путем квантования весов, смещений и активизаций слоев свертки до 8-битных масштабированных целочисленных типов данных. Затем можно использовать MATLAB Coder™ для генерации оптимизированного кода для квантованной сети. Созданный код использует преимущества SIMD процессора ARM ®, используя вычислительную библиотеку ARM. Созданный код может быть интегрирован в проект в виде исходного кода, статических или динамических библиотек или исполняемых файлов, которые можно развернуть на различных платформах процессора ARM, таких как Raspberry Pi™.
Для этих слоев свертки можно создать код C++, который использует вычислительную библиотеку ARM и выполняет вычисления вывода в 8-битных целых числах:
2-D слой свертки (convolution2dLayer
(инструментарий глубокого обучения))
2-D сгруппированный сверточный слой (groupedConvolution2dLayer
(инструментарий глубокого обучения)). Значение NumGroups
входной аргумент должен быть равен 2
.
Генерация кода C++ для квантованных сетей глубокого обучения поддерживает DAGNetwork
(инструментарий глубокого обучения) и SeriesNetwork
(Панель инструментов глубокого обучения).
Чтобы создать код, который выполняет вычисления вывода в 8-битных целых числах, в coder.ARMNEONConfig
объект dlcfg
, задайте следующие дополнительные свойства:
dlcfg.CalibrationResultFile = 'dlquantizerObjectMatFile'; dlcfg.DataType = 'int8';
Кроме того, в приложении MATLAB Coder на вкладке Глубокое обучение задайте для параметра Целевая библиотека значение ARM Compute
. Затем установите параметры «Тип данных» и «Путь к файлу результатов калибровки».
Здесь 'dlquantizerObjectMatFile'
- имя MAT-файла, dlquantizer
(Deep Learning Toolbox) генерирует для конкретных калибровочных данных. Для калибровки установите ExecutionEnvironment
имущества dlquantizer
объект в 'CPU'
.
В противном случае выполните действия, описанные в разделе Создание кода для сетей глубокого обучения с помощью вычислительной библиотеки ARM.
Пример см. в разделе Создание кода для квантованной сети глубокого обучения на Raspberry Pi.
codegen
| coder.loadDeepLearningNetwork
| calibrate
(инструментарий глубокого обучения) | dlquantizationOptions
(инструментарий для глубокого обучения) | dlquantizer
(инструментарий для глубокого обучения) | validate
(инструментарий для глубокого обучения)