exponenta event banner

loadLearnerForCoder

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

Описание

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

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

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

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

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

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

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

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), чтобы создать код 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.

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

свернуть все

Имя 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.

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

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

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