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

С MATLAB® Coder™ можно сгенерировать код для предсказания от уже обученной сверточной нейронной сети (CNN), предназначаясь для встроенной платформы, которая использует процессор Intel®. Генератор кода использует в своих интересах Math Kernel Library Intel для Глубоких нейронных сетей (MKL-DNN). Сгенерированный код реализует CNN с архитектурой, слоями и параметрами, заданными во входе SeriesNetwork или DAGNetwork сетевой объект.

Сгенерируйте код при помощи одного из этих методов:

  • Стандартный codegen команда для генерации кода C/C++ из кода MATLAB.

  • Приложение MATLAB Coder.

  • cnncodegen команда, которая генерирует Код С++ и создает статическую библиотеку для CNN.

Требования

  • На 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

    Примечание

    Можно задать входные параметры полуточности для генерации кода. Однако тип генератора кода бросает входные параметры к с одинарной точностью. Использование Deep Learning Toolbox арифметика с плавающей точкой, с одинарной точностью для всех расчетов в MATLAB.

Сгенерированный код

Сеть сгенерирована как класс 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 соответствуйте весам и сместите параметры для слоев свертки в сети.

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

| | | |

Похожие темы