С MATLAB® Coder™ можно сгенерировать код для прогноза от уже обученной сверточной нейронной сети (CNN), предназначаясь для встроенной платформы, которая использует процессор Intel®. Генератор кода использует в своих интересах Math Kernel Library Intel для Глубоких нейронных сетей (MKL-DNN). Сгенерированный код реализует CNN с архитектурой, слоями и параметрами, заданными во входе SeriesNetwork
или DAGNetwork
сетевой объект.
Сгенерируйте код при помощи одного из этих методов:
Стандартный codegen
команда для генерации кода C/C++ из кода MATLAB.
Приложение MATLAB Coder.
cnncodegen
команда, которая генерирует Код С++ и создает статическую библиотеку для CNN.
Когда вы генерируете код для нейронной сети при помощи codegen
или приложение MATLAB Coder, сгенерированный код использует упорядоченное по столбцам размещение в ваших данных массива. Чтобы совпадать с упорядоченным по строкам размещением, которое использует библиотека глубокого обучения, генератор кода должен вставить операции, чтобы преобразовать упорядоченное по столбцам размещение в упорядоченное по строкам размещение. Эти операции преобразования могут ухудшить производительность сгенерированного кода. Генерация кода для глубоких нейронных сетей не поддерживает MATLAB Coder упорядоченные по строкам опции, такие как RowMajor
параметр конфигурации.
На Windows®, генерации кода для нейронных сетей для глубокого обучения с codegen
функция требует Microsoft® Visual Studio® 2015 или позже.
Интерфейс MATLAB Coder для Библиотек Глубокого обучения. Чтобы установить этот пакет поддержки, выберите его из меню MATLAB Add-Ons.
Intel Math Kernel Library для глубоких нейронных сетей (MKL-DNN)
Deep Learning Toolbox™.
Переменные окружения для компиляторов и библиотек. Для получения дополнительной информации смотрите Предпосылки для Глубокого обучения для MATLAB Coder.
codegen
Напишите функцию точки входа в MATLAB что:
Использует coder.loadDeepLearningNetwork
функционируйте, чтобы создать и настроить сетевой объект CNN. Для получения дополнительной информации смотрите Предварительно обученные сети Загрузки для Генерации кода.
Вызывает predict
метод сети на входном параметре функции точки входа.
Задает 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
Сеть сгенерирована как класс C++, содержащий массив классов слоя. setup()
метод класса настраивает указатели и выделяет память для каждого слоя сетевого объекта. 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
.
Сгенерируйте код.
cnncodegen
Загрузите предварительно обученную сеть.
Для получения дополнительной информации смотрите Предварительно обученные сети Загрузки для Генерации кода.
Вызовите cnncodegen
с 'targetlib'
заданный как 'mkldnn'
. Например:
net = googlenet; cnncodegen(net,'targetlib','mkldnn');
cnncodegen
команда генерирует Код С++ и make-файл, cnnbuild_rtw.mk
. Сгенерированные файлы находятся в codegen
папка.
Сеть сгенерирована как класс C++, содержащий массив классов слоя. setup()
метод класса настраивает указатели и выделяет память для каждого слоя сетевого объекта. predict()
метод вызывает прогноз для каждого из слоев в сети.
Двоичные файлы экспортируются для слоев параметрами такой, как полностью соединено и слои свертки в сети. Например, файлы cnn_CnnMain_conv*_w
и cnn_CnnMain_conv*_b
соответствуйте весам и сместите параметры для слоев свертки в сети.
cnncodegen
| codegen
| coder.DeepLearningConfig
| coder.MklDNNConfig
| coder.loadDeepLearningNetwork