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

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

Определенные объекты модели классификации и регрессии имеют predict или random функция, которая поддерживает генерацию кода. Предсказание с использованием этих функций объекта требует обученного объекта модели классификации или регрессии, но -args опция codegen (MATLAB Coder) не принимает эти объекты. Обойдите это ограничение при помощи saveLearnerForCoder и loadLearnerForCoder как описано в этом примере.

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

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

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

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

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

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

Сохраните модель с помощью saveLearnerForCoder

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

saveLearnerForCoder(Mdl,'SVMModel');

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

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

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

Задайте функцию точки входа, которая возвращает предсказанные метки для входных данных предиктора. В рамках функции загружает обученную модель классификации с помощью loadLearnerForCoder, и затем передайте загруженную модель, чтобы 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 = loadLearnerForCoder('SVMModel');
label = predict(Mdl,x);
end

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

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

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

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

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

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

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

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

codegen predictLabelsSVM -args {X}
Code generation successful.

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

Тип сборки

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

  • Функция MEX (MATLAB Executable)

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

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

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

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

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

По умолчанию codegen генерирует MEX-функцию. Функция MEX является программой на C/C + +, которая исполняется из MATLAB. Можно использовать MEX-функцию, чтобы ускорить алгоритмы MATLAB и протестировать сгенерированный код на функциональность и проблемы времени выполнения. Для получения дополнительной информации смотрите Алгоритм MATLAB Acceleration (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 возвращает логический 1 (true), что означает, что все входы равны. Сравнение подтверждает, что predict функция, predictLabelsSVM функция и MEX-функция возвращают те же метки.

См. также

| | | (MATLAB CODER)

Похожие темы