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 для подсвеченного шага.

Code generation workflow for the object function of a machine learning model. Step 1: Train a model. Step 2: Save the model. Step 3 (highlighted): Define an entry-point function. Step 4: Generate code. Step 5: Verify the generated code.

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

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

Fixed-point code generation workflow. Step 1: Train a model. Step 2: Save the model. Step 3: Define the fixed-point data types. Step 4 (highlighted): Define an entry-point function. Step 5 (optional): Optimize the fixed-point data types. Step 6: Generate code. Step 7: Verify the generated code.

пример

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 для деталей. Чтобы узнать о генерации кода для нахождения самых близких соседей, использующих самую близкую соседнюю модель искателя, смотрите Генерацию кода для Самого близкого Соседнего Искателя.

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

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

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

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 возвращает (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

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

свернуть все

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

Советы

  • Для генерации кода с одинарной точностью для модели Gaussian process regression (GPR) или модели машины опорных векторов (SVM), используйте стандартизированные данные путем определения 'Standardize',true когда вы обучаете модель.

Алгоритмы

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

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

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

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

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

Расширенные возможности

Введенный в R2019b