exponenta event banner

Создание кода для квантованных сетей глубокого обучения

Глубокое обучение использует архитектуры нейронных сетей, которые содержат множество уровней обработки, включая сверточные уровни. Модели глубокого обучения обычно работают с большими наборами помеченных данных. Выполнение вывода по этим моделям является вычислительной интенсивностью, требующей значительного объема памяти. Нейронные сети используют память для хранения входных данных, параметров (весов) и активаций от каждого уровня по мере распространения входных данных по сети. В сетях 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.

См. также

Приложения

Функции

Объекты

Связанные темы