С MATLAB® Coder™ можно сгенерировать код для предсказания от уже обученной сверточной нейронной сети (CNN), нацеленной на встраиваемую платформу, использующую Intel® процессора. Генератор кода использует преимущества библиотеки Intel Math Kernel Library for Глубокие Нейронные Сети (MKL-DNN). Сгенерированный код реализует CNN с архитектурой, слоями и параметрами, заданными в вход SeriesNetwork
(Deep Learning Toolbox) или DAGNetwork
(Deep Learning Toolbox) сетевой объект.
Сгенерируйте код с помощью одного из следующих методов:
Стандарт codegen
команда для генерации кода C/C + + из кода MATLAB.
Приложение MATLAB Coder.
В Windows®, генерация кода для нейронных сетей для глубокого обучения с codegen
функция требует Microsoft® Визуальная студия® 2015 или позже.
Интерфейс MATLAB Coder для библиотек глубокого обучения. Чтобы установить этот пакет поддержки, выберите его в меню Add-Ons MATLAB.
Intel Math Kernel Library для глубоких нейронных сетей (MKL-DNN)
Deep Learning Toolbox™.
Переменные окружения для компиляторов и библиотек. Для получения дополнительной информации смотрите Необходимые условия для глубокого обучения с MATLAB Coder.
codegen
Напишите функцию точки входа в MATLAB, которая:
Использует coder.loadDeepLearningNetwork
функция для создания и настройки сетевого объекта CNN. Для получения дополнительной информации смотрите Загрузка предварительно обученных сетей для генерации кода.
Вызывает predict
(Deep Learning Toolbox) метод сети на входном параметре функции точки входа.
Задает MiniBatchSize
в predict
способ управления использованием памяти для предсказания на нескольких входных изображениях или наблюдениях.
Для примера:
function out = googlenet_predict(in) %#codegen % A persistent object mynet is used to load the series network object. % At the first call to this function, the persistent object is constructed and % setup. When the function is called subsequent times, the same object is reused % to call predict on inputs, thus avoiding reconstructing and reloading the % network object. persistent mynet; if isempty(mynet) mynet = coder.loadDeepLearningNetwork('googlenet'); end % pass in input out = predict(mynet,in,'MiniBatchSize',2);
Создайте объект строения генерации кода для MEX или для статической или динамически связанной библиотеки. Чтобы задать параметры генерации кода для MKL-DNN, установите DeepLearningConfig
свойство для coder.MklDNNConfig
объект, который вы создаете с coder.DeepLearningConfig
.
cfg = coder.config('lib'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn');
Запуск codegen
команда. Используйте -config
опция для задания объекта строения. Используйте -args
опция для задания типа входа. Размер входа соответствует размеру входного слоя сети GoogLeNet с 16
различные изображения или наблюдения.
codegen -config cfg googlenet_predict -args {ones(224,224,3,16)} -report
Примечание
Можно задать входы половинной точности для генерации кода. Однако тип генератора кода приводит входы к одинарной точности. Deep Learning Toolbox использует арифметику с одной точностью и плавающей точкой для всех расчетов в MATLAB.
Сеть генерируется как класс C++, содержащий массив классов слоев. The setup()
метод класса настраивает указатели и выделяет память для каждого слоя сетевого объекта. The predict()
метод вызывает предсказание для каждого из слоев в сети. Генератор кода производит функцию googlenet_predict()
в googlenet_predict.cpp
который соответствует функции точки входа MATLAB. Эта функция создает статический объект для сети и вызывает методы настройки и предсказания.
Двоичные файлы экспортируются для слоев с такими параметрами, как полносвязные и свертки в сети. Для примера, файлов cnn_googlenet_conv*_w
и cnn_googlenet_conv*_b
соответствуют весам и параметрам смещения для слоев свертки в сети.
Следуйте обычным шагам для определения функции точки входа и определения входных типов. См. «Генерация кода С при помощи приложения MATLAB Coder».
На Generate Code шаге:
Установите Language значение C++.
Нажмите More Settings. На панели Deep Learning задайте Target library MKL-DNN
.
Сгенерируйте код.
codegen
| coder.DeepLearningConfig
| coder.loadDeepLearningNetwork
| coder.MklDNNConfig