Генерация кода для нейронных сетей для глубокого обучения с MKL-DNN

С 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

  1. Напишите функцию точки входа в 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); 

  2. Создайте объект настройки генерации кода для MEX или для статической или динамически подключаемой библиотеки. Чтобы задать параметры генерации кода для MKL-DNN, установите DeepLearningConfig свойство к coder.MklDNNConfig возразите, что вы создаете с coder.DeepLearningConfig.

    cfg = coder.config('lib');
    cfg.TargetLang = 'C++';
    cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn');
  3. Запустите 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

  1. Выполните обычные шаги для определения функции точки входа и определения входных типов. Смотрите Генерируют код С при помощи Приложения MATLAB Coder.

  2. На шаге Generate Code:

    • Установите Language на C++.

    • Нажмите More Settings. В панели Deep Learning, набор Target library к MKL-DNN.

  3. Сгенерируйте код.

Генерация кода при помощи cnncodegen

  1. Загрузите предварительно обученную сеть.

    Для получения дополнительной информации смотрите Предварительно обученные сети Загрузки для Генерации кода.

  2. Вызовите 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 соответствуйте весам и сместите параметры для слоев свертки в сети.

Смотрите также

| | | |

Похожие темы