saveLearnerForCoder

Сохраните объект модели в файле для генерации кода

Описание

Сгенерировать код C/C + + для объектных функций моделей машинного обучения ( в том числеpredict, random, knnsearch, rangesearch, и функции инкрементного обучения), использование saveLearnerForCoder, loadLearnerForCoder, и codegen (MATLAB Coder). После обучения модели машинного обучения сохраните модель при помощи saveLearnerForCoder. Задайте функцию точки входа, которая загружает модель при помощи loadLearnerForCoder и вызывает функцию объекта. Затем используйте codegen или MATLAB® Coder™ приложение, чтобы сгенерировать код C/C + +. Для генерации кода C/C + + требуется MATLAB Coder.

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

Генерация кода C/C + + с фиксированной точкой требует дополнительного шага, который определяет типы данных с фиксированной точкой переменных, необходимых для предсказания. Создайте структуру типа данных с фиксированной точкой с помощью функции типа данных, сгенерированной generateLearnerDataTypeFcn, и используйте структуру в качестве входного параметра loadLearnerForCoder в функции точки входа. Для генерации кода C/C + + с фиксированной точкой требуется MATLAB Coder и Fixed-Point Designer™.

Этот график потока показывает рабочий процесс генерации кода с фиксированной точкой для predict функция модели машинного обучения. Использовать saveLearnerForCoder для выделенного шага.

пример

saveLearnerForCoder(Mdl,filename) готовит классификационную модель, регрессионную модель или ближайший соседний искатель (Mdl) для генерации кода и сохраняет его в форматированный MATLAB двоичный файл (MAT-файл) с именем filename. Можно пройти filename кому loadLearnerForCoder чтобы восстановить объект модели из filename файл.

Примеры

свернуть все

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

Этот пример кратко объясняет рабочий процесс генерации кода для предсказания моделей машинного обучения в командной строке. Для получения дополнительной информации смотрите Генерацию кода для Предсказания Модели Машинного Обучения в Командной Строке. Вы также можете сгенерировать код с помощью приложения MATLAB Coder. Смотрите Генерацию кода для предсказания модели машинного обучения с использованием приложения MATLAB Coder для получения дополнительной информации. Чтобы узнать о генерации кода для поиска ближайших соседей с помощью модели ближайшего соседа-искателя, смотрите Генерацию кода для ближайшего соседа Searcher.

Обучите модель

Загрузите набор данных радужки Фишера. Удалите все наблюдаемые setosa irises данные так, чтобы X и Y содержат данные только для двух классов.

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

Обучите модель классификации машины опорных векторов (SVM) с помощью обработанного набора данных.

Mdl = fitcsvm(X,Y);

Mdl является ClassificationSVM модель.

Сохраните модель

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

saveLearnerForCoder(Mdl,'SVMIris');

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

Задайте функцию точки входа с именем classifyIris что делает следующее:

  • Примите измерения цветка радужки с столбцами, соответствующими meas, и возвращают предсказанные метки.

  • Загрузите обученную модель классификации SVM.

  • Спрогнозируйте метки с помощью загруженной классификационной модели для измерений цветка радужки.

type classifyIris.m % Display contents of classifyIris.m file
function label = classifyIris(X) %#codegen
%CLASSIFYIRIS Classify iris species using SVM Model
%   CLASSIFYIRIS classifies the iris flower measurements in X using the SVM
%   model in the file SVMIris.mat, and then returns class labels in label.
Mdl = loadLearnerForCoder('SVMIris');
label = predict(Mdl,X);
end

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

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

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

Сгенерируйте код для функции точки входа с помощью codegen (MATLAB Coder). Поскольку C и C++ являются статически типизированными языками, вы должны определить свойства всех переменных в функции точки входа во время компиляции. Передайте X как значение -args опция, чтобы указать, что сгенерированный код должен принять вход, который имеет совпадающий тип данных и размер массива, в качестве обучающих данных X. Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof (MATLAB Coder). Для получения дополнительной информации смотрите Specify Variable-Size Arguments for Генерация Кода и Specify Properties of Entry-Point Function Inputs (MATLAB Coder).

codegen classifyIris -args {X}
Code generation successful.

codegen генерирует MEX-функцию classifyIris_mex с зависящим от платформы внутренним абонентом.

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

Сравнение меток, классифицированных с помощью predict, classifyIris, и classifyIris_mex.

label1 = predict(Mdl,X);
label2 = classifyIris(X);
label3 = classifyIris_mex(X);
verify_label = isequal(label1,label2,label3)
verify_label = logical
   1

isequal возвращает логический 1 (true), что означает, что все входы равны. Метки, классифицированные все три способа, одинаковы.

После обучения модели машинного обучения сохраните модель используя saveLearnerForCoder. Для генерации кода с фиксированной точкой задайте типы данных с фиксированной точкой переменных, необходимых для предсказания, используя функцию типа данных, сгенерированную generateLearnerDataTypeFcn. Затем задайте функцию точки входа, которая загружает модель с помощью обоих loadLearnerForCoder и заданные типы данных с фиксированной точкой и вызывает predict функция модели. Использование codegen (MATLAB Coder), чтобы сгенерировать код C/C + + с фиксированной точкой для функции точки входа, а затем проверьте сгенерированный код.

Перед генерацией кода используйте codegen, можно использовать buildInstrumentedMex (Fixed-Point Designer) и showInstrumentationResults (Fixed-Point Designer), чтобы оптимизировать типы данных с фиксированной точкой для улучшения эффективности кода с фиксированной точкой. Запишите минимальное и максимальное значения именованных и внутренних переменных для предсказания при помощи buildInstrumentedMex. Просмотр результатов инструментирования с помощью showInstrumentationResults; затем на основе результатов настройте свойства типа данных с фиксированной точкой переменных. Для получения дополнительной информации об этом необязательном шаге смотрите Генерацию кода с фиксированной точкой для предсказания SVM.

Обучите модель

Загрузите ionosphere набор данных и train двоичной модели классификации SVM.

load ionosphere
Mdl = fitcsvm(X,Y,'KernelFunction','gaussian');

Mdl является ClassificationSVM модель.

Сохраните модель

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

saveLearnerForCoder(Mdl,'myMdl');

Задайте типы данных с фиксированной точкой

Использование generateLearnerDataTypeFcn сгенерировать функцию, которая задает типы данных с фиксированной точкой переменных, необходимых для предсказания модели SVM.

generateLearnerDataTypeFcn('myMdl',X)

generateLearnerDataTypeFcn генерирует myMdl_datatype функция.

Создайте структуру T который определяет типы данных с фиксированной точкой при помощи myMdl_datatype.

T = myMdl_datatype('Fixed')
T = struct with fields:
               XDataType: [0x0 embedded.fi]
           ScoreDataType: [0x0 embedded.fi]
    InnerProductDataType: [0x0 embedded.fi]

Структура T включает поля для именованных и внутренних переменных, необходимых для запуска predict функция. Каждое поле содержит объект с фиксированной точкой, возвращаемый fi (Fixed-Point Designer). Объект с фиксированной точкой задает свойства типа данных с фиксированной точкой, такие как размеры слова и длина дроби. Для примера отобразите свойства типа данных с фиксированной точкой данных предиктора.

T.XDataType
ans = 

[]

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 14

        RoundingMethod: Floor
        OverflowAction: Wrap
           ProductMode: FullPrecision
  MaxProductWordLength: 128
               SumMode: FullPrecision
      MaxSumWordLength: 128

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

Задайте функцию точки входа с именем myFixedPointPredict что делает следующее:

  • Примите данные предиктора X и структуру типа данных с фиксированной точкой T.

  • Загрузка версии обученной модели классификации SVM с фиксированной точкой с помощью обоих loadLearnerForCoder и структура T.

  • Спрогнозируйте метки и счета, используя загруженную модель.

type myFixedPointPredict.m % Display contents of myFixedPointPredict.m file
function [label,score] = myFixedPointPredict(X,T) %#codegen
Mdl = loadLearnerForCoder('myMdl','DataType',T);
[label,score] = predict(Mdl,X);
end

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

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

The XDataType поле структуры T задает тип данных предиктора с фиксированной точкой. Преобразование X к типу, указанному в T.XDataType при помощи cast (Fixed-Point Designer) функцию.

X_fx = cast(X,'like',T.XDataType);

Сгенерируйте код для функции точки входа с помощью codegen. Задайте X_fx и постоянные складные T как входные параметры функции точки входа.

codegen myFixedPointPredict -args {X_fx,coder.Constant(T)}
Code generation successful.

codegen генерирует MEX-функцию myFixedPointPredict_mex с зависящим от платформы внутренним абонентом.

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

Передайте данные предиктора в predict и myFixedPointPredict_mex для сравнения выходов.

[labels,scores] = predict(Mdl,X);
[labels_fx,scores_fx] = myFixedPointPredict_mex(X_fx,T);

Сравните выходы predict и myFixedPointPredict_mex.

verify_labels = isequal(labels,labels_fx)
verify_labels = logical
   1

isequal возвращает логический 1 (true), что означает labels и labels_fx равны. Если метки не равны, можно вычислить процент неправильно классифицированных меток следующим образом.

sum(strcmp(labels_fx,labels)==0)/numel(labels_fx)*100
ans = 0

Найдите максимальное из относительных различий между выходами счета.

relDiff_scores = max(abs((scores_fx.double(:,1)-scores(:,1))./scores(:,1)))
relDiff_scores = 0.0055

Если вы не удовлетворены результатами сравнения и хотите улучшить точность сгенерированного кода, можно настроить типы данных с фиксированной точкой и перегенерировать код. Для получения дополнительной информации смотрите Советы в generateLearnerDataTypeFcn, функции типа данных и генерации кода с фиксированной точкой для предсказания SVM.

Входные параметры

свернуть все

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

Имя файла, заданное как вектор символов или строковый скаляр.

Если на filename файл существует, тогда saveLearnerForCoder перезаписывает файл.

Расширение filename файл должен быть .mat. Если filename не имеет внутреннего абонента, тогда saveLearnerForCoder добавляет .mat.

Если filename не включает полный путь, тогда saveLearnerForCoder сохраняет файл в текущей папке.

Пример: 'SVMMdl'

Типы данных: char | string

Алгоритмы

saveLearnerForCoder готовит модель машинного обучения (Mdl) для генерации кода. Функция удаляет некоторые ненужные свойства.

  • Для модели, которая имеет соответствующую компактную модель, saveLearnerForCoder функция применяет соответствующее compact функцию к модели перед ее сохранением.

  • Для модели, которая не имеет соответствующей компактной модели, такой как ClassificationKNN, ClassificationLinear, RegressionLinear, ExhaustiveSearcher, и KDTreeSearcher, saveLearnerForCoder функция удаляет такие свойства, как свойства оптимизации гипероптимизации параметров управления, обучающая информация решателя и другие.

loadLearnerForCoder загружает модель, сохраненную saveLearnerForCoder.

Альтернативная функциональность

  • Используйте конфигуратор кодера, созданный learnerCoderConfigurer для моделей, перечисленных в этой таблице.

    МодельОбъект конфигуратора кодера
    Двоичное дерево принятия решений для многоклассовой классификацииClassificationTreeCoderConfigurer
    SVM для одноклассовой и двоичной классификацииClassificationSVMCoderConfigurer
    Линейная модель для двоичной классификацииClassificationLinearCoderConfigurer
    Многоклассовая модель для SVM и линейных моделейClassificationECOCCoderConfigurer
    Двоичное дерево решений для регрессииRegressionTreeCoderConfigurer
    Машина опорных векторов (SVM)RegressionSVMCoderConfigurer
    Линейная регрессияRegressionLinearCoderConfigurer

    После обучения модели машинного обучения создайте конфигуратор кодера модели. Используйте функции объекта и свойства конфигуратора, чтобы сконфигурировать опции генерации кода и сгенерировать код для predict и update функций модели. Если вы генерируете код с помощью конфигуратора кодера, можно обновить параметры модели в сгенерированном коде, не регенерируя код. Для получения дополнительной информации смотрите Генерация кода для предсказания и Обновление с использованием Coder Configurer.

Введенный в R2019b