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

В этом примере показано, как сгенерировать код для предсказания классификации и объектов модели регрессии в командной строке. Можно также сгенерировать код с помощью приложения 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 команду помогать вам диагностировать и зафиксировать нарушения, которые привели бы к ошибкам во время генерации кода. Смотрите Проверку кода с Анализатором кода (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). Для получения дополнительной информации смотрите, Задают Аргументы Переменного Размера для Code Generation and Specify Properties Входных параметров функции Точки входа (MATLAB Coder)

Создайте тип

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

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

  • Автономный код 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 (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-функция возвращают те же метки.

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

(MATLAB Coder) | | |

Похожие темы