loadLearnerForCoder

Восстановите объект модели из сохраненной модели для генерации кода

Описание

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

Для функций, которые поддерживают генерацию кода C/C + + с одной точностью, используйтеsaveLearnerForCoder, loadLearnerForCoder, и codegen (MATLAB Coder); задайте аргумент имя-значение 'DataType','single' когда вы вызываете loadLearnerForCoder функция.

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

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

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

пример

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

пример

Mdl = loadLearnerForCoder(filename,'DataType','single') восстанавливает модель классификации или регрессии с одной точностью (Mdl) из модели, сохраненной в форматированном двоичном файле MATLAB (MAT-файл) с именем filename.

пример

Mdl = loadLearnerForCoder(filename,'DataType',T) возвращает версию модели с фиксированной точкой, сохраненную в filename. Структура T содержит поля, которые задают типы данных с фиксированной точкой для переменных, необходимых для использования predict функция модели. Создание T использование функции, сгенерированной generateLearnerDataTypeFcn.

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

Примеры

свернуть все

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

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

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

Загрузите fisheriris набор данных. Создание X как числовая матрица, которая содержит четыре измерения лепестков для 150 ирисов. Создание Y как массив ячеек из векторов символов, который содержит соответствующие виды радужной оболочки.

load fisheriris
X = meas;
Y = species;

Обучите наивный классификатор Байеса с помощью предикторов X и метки классов Y.

Mdl = fitcnb(X,Y);

Mdl является обученным ClassificationNaiveBayes классификатор.

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

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

saveLearnerForCoder(Mdl,'naiveBayesIris');

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

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

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

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

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

type classifyIrisSingle.m
function label = classifyIrisSingle(X) %#codegen
% CLASSIFYIRISSINGLE Classify iris species using single-precision naive
% Bayes model
% CLASSIFYIRISSINGLE classifies the iris flower measurements in X using the
% single-precision naive Bayes model in the file naiveBayesIris.mat, and
% then returns the predicted labels in label.
Mdl = loadLearnerForCoder('naiveBayesIris','DataType','single');
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).

Xpred = single(X);
codegen classifyIrisSingle -args Xpred
Code generation successful.

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

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

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

label1 = predict(Mdl,X);
label2 = classifyIrisSingle(X);
label3 = classifyIrisSingle_mex(Xpred);
verify_label = isequal(label1,label2,label3)
verify_label = logical
   1

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

sum(strcmp(label3,label1)==0)/numel(label1)*100
ans = 0

После обучения модели машинного обучения сохраните модель используя 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.

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

свернуть все

Имя MAT-файла, который содержит массив структур, представляющий объект модели, заданный в виде вектора символов или строкового скаляра. Вы должны создать filename файл с использованием saveLearnerForCoder. loadLearnerForCoder восстанавливает модель, сохраненную в filename файл во время компиляции.

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

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

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

Пример: 'Mdl'

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

Типы данных с фиксированной точкой, заданные как структура. Этот аргумент предназначен для генерации кода C/C + + с фиксированной точкой.

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

Можно использовать этот аргумент, когда модель в filename файл является моделью SVM, моделью дерева решений и ансамблем деревьев решений.

Типы данных: struct

Выходные аргументы

свернуть все

Модель машинного обучения, возвращенная как один из следующих объектов модели:

Совет

  • Для генерации кода с одной точностью для модели регрессии Гауссова процесса (GPR), создайте модель при помощи fitrgp(X,Y,'Standardize',1).

Алгоритмы

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