Генерация кода для прогноза модели машинного обучения в командной строке

Этот пример показывает, как сгенерировать код для прогноза классификации и объектов модели регрессии в командной строке. Можно также сгенерировать код с помощью приложения MATLAB® Coder™. Смотрите Генерацию кода для Прогноза Модели Машинного обучения Используя Приложение MATLAB Coder для деталей.

Определенная классификация и объекты модели регрессии имеют predict или функцию random, которая поддерживает генерацию кода. Для списка объектов модели и объектных функций, которые поддерживают генерацию кода, смотрите Поддержку Генерации кода, Указания по применению и Ограничения. Прогноз с помощью этих объектных функций требует обученной классификации или объекта модели регрессии, но опция -args codegen не принимает эти объекты. Работа вокруг этого ограничения при помощи saveCompactModel и loadCompactModel, как описано в этом примере.

Эта блок-схема показывает рабочий процесс генерации кода для объектных функций объектов модели регрессии и классификации.

После того, как вы обучаете модель, сохраняете обученную модель при помощи saveCompactModel. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadCompactModel и вызывает объектную функцию. Затем сгенерируйте код для функции точки входа при помощи codegen и проверьте сгенерированный код.

Обучите модель классификации

Обучите объект модели классификации, оборудованный включенной генерацией кода функцией predict. В этом случае обучите модель классификации машин вектора поддержки (SVM).

load fisheriris
inds = ~strcmp(species,'setosa');
X = meas(inds,3:4);
Y = species(inds);
Mdl = fitcsvm(X,Y);

Этот шаг может включать предварительную обработку данных, выбор функции и оптимизацию модели с помощью перекрестной проверки, например.

Сохраните модель Используя saveCompactModel

Сохраните модель классификации в файл SVMModel.mat при помощи saveCompactModel.

saveCompactModel(Mdl,'SVMModel');

saveCompactModel делает полную модель Mdl классификации компактной, и затем сохраняет ее в двоичный файл MATLAB SVMModel.mat как массив структур в текущей папке.

Задайте функцию точки входа

Функция точки входа, также известная как или первичную функцию верхнего уровня, является функцией, которую вы задаете для генерации кода. Поскольку вы не можете вызвать функцию в верхнем уровне с помощью codegen, необходимо задать функцию точки входа, которая вызывает включенные генерацией кода функции, и сгенерируйте код C/C++ для функции точки входа при помощи codegen. Все функции в функции точки входа должны поддержать генерацию кода.

Задайте функцию точки входа, которая возвращает предсказанные метки для входных данных о предикторе. В функции загрузите обученную модель классификации при помощи loadCompactModel, и затем передайте загруженную модель predict. В этом случае задайте функцию predictLabelsSVM, которая предсказывает метки с помощью модели SVM Mdl.

type predictLabelsSVM.m % Display contents of predictLabelsSVM.m file
function label = predictLabelsSVM(x) %#codegen
%PREDICTLABELSSVM Label new observations using trained SVM model Mdl
%   predictLabelsSVM predicts the vector of labels label using 
%   the saved SVM model Mdl and the predictor data x.
Mdl = loadCompactModel('SVMModel');
label = predict(Mdl,x);
end

Добавьте директиву компилятора %#codegen (или прагма) к функции точки входа после функциональной подписи, чтобы указать, что вы намереваетесь сгенерировать код для алгоритма MATLAB. Добавление этой директивы дает Анализатору кода MATLAB команду помогать вам диагностировать и зафиксировать нарушения, которые привели бы к ошибкам во время генерации кода. Смотрите Контрольный код с Анализатором кода (MATLAB Coder).

Примечание: Если вы нажимаете кнопку, расположенную в верхнем правом разделе этой страницы, и открываете этот пример в MATLAB®, затем MATLAB® открывает папку в качестве примера. Эта папка включает файл функции точки входа.

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

Настройте компилятор

Чтобы сгенерировать код C/C++, у вас должен быть доступ к компилятору C/C++, который сконфигурирован правильно. MATLAB Coder определяет местоположение и использует поддерживаемый, установленный компилятор. Можно использовать mex -setup, чтобы просмотреть и изменить компилятор по умолчанию. Для получения дополнительной информации см. Компилятор Значения по умолчанию Изменения (MATLAB).

Сгенерируйте код Используя codegen

Сгенерируйте код для функции точки входа использование codegen. Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Задайте типы данных и размеры всех входных параметров функции точки входа, когда вы вызовете codegen при помощи опции -args.

В этом случае передайте X как значение опции -args, чтобы указать, что сгенерированный код должен принять вход, который имеет совпадающий тип данных и размер массивов как данные тренировки X.

codegen predictLabelsSVM -args {X}

Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof. Для получения дополнительной информации смотрите, Задают Аргументы Переменного Размера для Code Generation and Specify Properties Входных параметров функции Точки входа (MATLAB Coder)

Создайте тип

MATLAB Coder может сгенерировать код для следующих типов сборки:

  • MEX (Исполняемый файл MATLAB) функция

  • Автономный код C/C++

  • Автономный код C/C++ скомпилирован к статической библиотеке

  • Автономный код C/C++ скомпилирован к динамически подключаемой библиотеке

  • Автономный код C/C++ скомпилирован к исполняемому файлу

Можно задать тип сборки с помощью опции -config codegen. Для получения дополнительной информации при установке опций генерации кода, см. опцию -config codegen и Сконфигурируйте Настройки Сборки (MATLAB Coder).

По умолчанию codegen генерирует MEX-функцию. MEX-функция является программой C/C++, которая является исполняемым файлом из MATLAB. Можно использовать MEX-функцию, чтобы ускорить алгоритмы MATLAB и протестировать сгенерированный код на функциональность и проблемы во время выполнения. Для получения дополнительной информации смотрите Ускорение алгоритма MATLAB (MATLAB Coder) и Почему Тестовые MEX-функции в MATLAB? (MATLAB Coder).

Отчет генерации кода

Можно использовать флаг -report, чтобы представить отчет генерации кода. Этот отчет помогает вам отладить проблемы генерации кода и просмотреть сгенерированный код C/C++. Для получения дополнительной информации см. Отчеты Генерации кода (MATLAB Coder).

Проверьте сгенерированный код

Протестируйте MEX-функцию, чтобы проверить, что сгенерированный код обеспечивает ту же функциональность как оригинальный код MATLAB. Чтобы выполнить этот тест, запустите MEX-функцию с помощью тех же входных параметров, что вы раньше запускали оригинальный код MATLAB, и затем сравнивали результаты. Выполнение MEX-функции в MATLAB прежде, чем сгенерировать автономный код также позволяет вам обнаружить и зафиксировать ошибки времени выполнения, которые намного более трудно диагностировать в сгенерированном автономном коде. Для получения дополнительной информации смотрите Почему Тестовые MEX-функции в MATLAB? (MATLAB Coder).

Передайте некоторые данные о предикторе, чтобы проверить, возвращают ли predict, predictLabelsSVM и MEX-функция те же метки.

labels1 = predict(Mdl,X);
labels2 = predictLabelsSVM(X);
labels3 = predictLabelsSVM_mex(X);

Сравните предсказанные метки при помощи isequal.

verifyMEX = isequal(labels1,labels2,labels3)
verifyMEX = logical
   1

isequal возвращает логическую единицу (true), что означает, что все входные параметры равны. Сравнение подтверждает, что функция predict, функция predictLabelsSVM и MEX-функция возвращают те же метки.

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

| | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте