В этом примере показано, как сгенерировать код для предсказания объектов классификации и регрессионой модели в командной строке. Можно также сгенерировать код с помощью приложения 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-функция возвращают те же метки.
learnerCoderConfigurer
| loadLearnerForCoder
| saveLearnerForCoder
| codegen
(MATLAB CODER)