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

С 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

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

  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++, содержащий массив классов слоев. The setup() метод класса настраивает указатели и выделяет память для каждого слоя сетевого объекта. The 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. Сгенерируйте код.

См. также

| | |

Похожие темы