Глубокое обучение использует архитектуры нейронной сети, которые содержат много слоев обработки, включая сверточные слои. Модели глубокого обучения обычно работают над большими наборами маркированных данных. Выполнение вывода на этих моделях в вычислительном отношении интенсивно, используя существенное количество памяти. Нейронные сети используют память, чтобы сохранить входные данные, параметры (веса) и активации от каждого слоя, когда вход распространяет через сеть. Глубокие нейронные сети обучены в MATLAB® используйте типы данных с плавающей запятой с одинарной точностью. Даже сети, которые малы в размере, требуют, чтобы значительный объем памяти и оборудование выполнили эти арифметические операции с плавающей точкой. Эти ограничения могут запретить развертывание моделей глубокого обучения к устройствам, которые имеют низкую вычислительную силу и меньшие ресурсы памяти. При помощи более низкой точности, чтобы сохранить веса и активации, можно уменьшать требования к памяти сети.
Можно использовать Deep Learning Toolbox™ в тандеме с пакетом поддержки Библиотеки Квантования Модели Deep Learning Toolbox, чтобы уменьшать объем потребляемой памяти глубокой нейронной сети путем квантования весов, смещений и активаций слоев свертки к 8-битным масштабированным целочисленным типам данных. Затем можно использовать MATLAB Coder™, чтобы сгенерировать оптимизированный код для квантованной сети. Сгенерированный код использует в своих интересах ARM® процессор SIMD при помощи библиотеки ARM Compute. Сгенерированный код может быть интегрирован в ваш проект как исходный код, статические или динамические библиотеки или исполняемые файлы, которые можно развернуть во множество платформ центрального процессора ARM, таких как Raspberry Pi™.
Можно сгенерировать Код С++ для этих слоев, который использует ARM, Вычисляют Библиотеку, и выполняет расчеты вывода в 8-битных целых числах:
2D слой свертки (convolution2dLayer
(Deep Learning Toolbox))
2D сгруппированный слой свертки (groupedConvolution2dLayer
(Deep Learning Toolbox)). Значение NumGroups
входной параметр должен быть равен 2
.
Слой объединения Max (maxPooling2dLayer
(Deep Learning Toolbox))
Исправленный слой Linear Unit (ReLU) (reluLayer
(Deep Learning Toolbox)
)
Генерация кода С++ для квантованных нейронных сетей для глубокого обучения поддерживает DAGNetwork
(Deep Learning Toolbox) и SeriesNetwork
(Deep Learning Toolbox) объекты.
Сгенерировать код, который выполняет расчеты вывода в 8-битных целых числах в вашем coder.ARMNEONConfig
объект dlcfg
, установите эти дополнительные свойства:
dlcfg.CalibrationResultFile = 'dlquantizerObjectMatFile'; dlcfg.DataType = 'int8';
В качестве альтернативы в приложении MATLAB Coder, на вкладке Deep Learning, устанавливает Target library на ARM Compute
. Затем установите параметры Calibration result file path и Data type.
Здесь 'dlquantizerObjectMatFile'
имя MAT-файла что dlquantizer
(Deep Learning Toolbox) генерирует для определенных калибровочных данных. В целях калибровки, набор ExecutionEnvironment
свойство dlquantizer
возразите против 'CPU'
.
В противном случае выполните шаги, описанные в Генерации кода для Нейронных сетей для глубокого обучения с ARM, Вычисляют Библиотеку.
Для примера смотрите Генерацию кода для Квантованной Нейронной сети для глубокого обучения на Raspberry Pi.
dlquantizer
(Deep Learning Toolbox) | dlquantizationOptions
(Deep Learning Toolbox) | calibrate
(Deep Learning Toolbox) | validate
(Deep Learning Toolbox) | coder.loadDeepLearningNetwork
| codegen