exponenta event banner

saveLearnerForCoder

Сохранить объект модели в файле для создания кода

Синтаксис

Описание

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

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

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

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

пример

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

Примеры

свернуть все

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

В этом примере кратко описывается процесс создания кода для прогнозирования моделей машинного обучения в командной строке. Дополнительные сведения см. в разделе Создание кода для прогнозирования модели машинного обучения в командной строке. Вы также можете создать код с помощью приложения MATLAB Coder. См. раздел Создание кода для прогнозирования модели машинного обучения с помощью приложения MATLAB Coder App для получения подробной информации. Сведения о создании кода для поиска ближайших соседей с помощью модели поиска ближайшего соседа см. в разделе Создание кода для поиска ближайшего соседа.

Модель поезда

Загрузите набор данных радужки Фишера. Удалить все наблюдаемые данные 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). Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Проход X как значение -args параметр, указывающий, что сгенерированный код должен принимать входные данные, имеющие тот же тип данных и размер массива, что и обучающие данные X. Если количество наблюдений неизвестно во время компиляции, можно также указать входные данные как переменные размеры, используя coder.typeof (Кодер MATLAB). Дополнительные сведения см. в разделах Определение аргументов переменного размера для генерации кода и Определение свойств входов функции точки входа (кодер MATLAB).

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), чтобы создать код C/C + + с фиксированной точкой для функции точки входа, а затем проверить сгенерированный код.

Перед созданием кода с помощью codegen, вы можете использовать buildInstrumentedMex (Конструктор фиксированных точек) и 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 (Конструктор фиксированных точек). Объект с фиксированной точкой задает свойства типа данных с фиксированной точкой, такие как длина слова и длина дроби. Например, отображение свойств типа данных с фиксированной точкой данных предиктора.

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 (Конструктор фиксированных точек).

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.

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

Представлен в R2019b