Создайте конфигуратор кодера модели машинного обучения
После обучения модели машинного обучения создайте конфигуратор кодера для модели при помощи learnerCoderConfigurer
. Используйте функции объекта и свойства конфигуратора, чтобы задать опции генерации кода и сгенерировать код C/C + + для predict
и update
функции модели машинного обучения. Для генерации кода C/C + + требуется MATLAB® Coder™.
Этот график потока показывает рабочий процесс генерации кода с помощью конфигуратора кодера. Использовать learnerCoderConfigurer
для выделенного шага.
возвращает конфигуратор кодера configurer
= learnerCoderConfigurer(Mdl
,X
)configurer
для модели машинного обучения Mdl
. Задайте данные предиктора X
для predict
функция Mdl
.
возвращает конфигуратор кодера с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Для примера можно задать количество выходных аргументов в configurer
= learnerCoderConfigurer(Mdl
,X
,Name,Value
)predict
function, имя файла сгенерированного кода C/C + + и уровень подробностей конфигуратора кодера.
Обучите модель машинного обучения, а затем сгенерируйте код для predict
и update
функций модели при помощи конфигуратора кодера.
Загрузите carsmall
набор данных и train регрессионной модели машины опорных векторов (SVM).
load carsmall
X = [Horsepower,Weight];
Y = MPG;
Mdl = fitrsvm(X,Y);
Mdl
является RegressionSVM
объект.
Создайте конфигуратор кодера для RegressionSVM
моделировать при помощи learnerCoderConfigurer
. Задайте данные предиктора X
. The learnerCoderConfigurer
функция использует входную X
конфигурирование атрибутов кодера predict
входной параметр функции.
configurer = learnerCoderConfigurer(Mdl,X)
configurer = RegressionSVMCoderConfigurer with properties: Update Inputs: Alpha: [1x1 LearnerCoderInput] SupportVectors: [1x1 LearnerCoderInput] Scale: [1x1 LearnerCoderInput] Bias: [1x1 LearnerCoderInput] Predict Inputs: X: [1x1 LearnerCoderInput] Code Generation Parameters: NumOutputs: 1 OutputFileName: 'RegressionSVMModel' Properties, Methods
configurer
является RegressionSVMCoderConfigurer
объект, который является конфигуратором кодера RegressionSVM
объект.
Чтобы сгенерировать код C/C + +, вы должны иметь доступ к компилятору C/C + +, который настроен правильно. MATLAB Coder находит и использует поддерживаемый, установленный компилятор. Можно использовать mex
-setup
чтобы просмотреть и изменить компилятор по умолчанию. Для получения дополнительной информации см. раздел «Изменение компилятора по умолчанию».
Сгенерируйте код для predict
и update
функции регрессионной модели SVM (Mdl
) с настройками по умолчанию.
generateCode(configurer)
generateCode creates these files in output folder: 'initialize.m', 'predict.m', 'update.m', 'RegressionSVMModel.mat' Code generation successful.
The generateCode
функция завершает следующие действия:
Сгенерируйте файлы MATLAB, необходимые для генерации кода, включая две функции точки входа predict.m
и update.m
для predict
и update
функции Mdl
, соответственно.
Создайте MEX-функцию с именем RegressionSVMModel
для двух функций точки входа.
Создайте код для MEX-функции в codegen\mex\RegressionSVMModel
папка.
Скопируйте MEX-функцию в текущую папку.
Отображение содержимого predict.m
, update.m
, и initialize.m
файлы при помощи type
функция.
type predict.m
function varargout = predict(X,varargin) %#codegen % Autogenerated by MATLAB, 23-Apr-2021 12:43:25 [varargout{1:nargout}] = initialize('predict',X,varargin{:}); end
type update.m
function update(varargin) %#codegen % Autogenerated by MATLAB, 23-Apr-2021 12:43:25 initialize('update',varargin{:}); end
type initialize.m
function [varargout] = initialize(command,varargin) %#codegen % Autogenerated by MATLAB, 23-Apr-2021 12:43:25 coder.inline('always') persistent model if isempty(model) model = loadLearnerForCoder('RegressionSVMModel.mat'); end switch(command) case 'update' % Update struct fields: Alpha % SupportVectors % Scale % Bias model = update(model,varargin{:}); case 'predict' % Predict Inputs: X X = varargin{1}; if nargin == 2 [varargout{1:nargout}] = predict(model,X); else PVPairs = cell(1,nargin-2); for i = 1:nargin-2 PVPairs{1,i} = varargin{i+1}; end [varargout{1:nargout}] = predict(model,X,PVPairs{:}); end end end
Обучите модель SVM с помощью частичного набора данных и создайте конфигуратор кодера для модели. Используйте свойства конфигуратора кодера, чтобы задать атрибуты кодера параметров модели SVM. Используйте функцию объекта конфигуратора кодера, чтобы сгенерировать код С, который предсказывает метки для новых данных предиктора. Затем переобучите модель, используя весь набор данных и параметры обновления в сгенерированном коде, не регенерируя код.
Обучите модель
Загрузите ionosphere
набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный ответ для радиолокационных возвратов, либо плохо ('b'
) или хорошо ('g'
). Обучите двоичную модель классификации SVM с помощью первых 50 наблюдений.
load ionosphere
Mdl = fitcsvm(X(1:50,:),Y(1:50));
Mdl
является ClassificationSVM
объект.
Создайте конфигуратор кодера
Создайте конфигуратор кодера для ClassificationSVM
моделировать при помощи learnerCoderConfigurer
. Задайте данные предиктора X
. The learnerCoderConfigurer
функция использует входную X
конфигурирование атрибутов кодера predict
входной параметр функции. Кроме того, установите количество выходов 2, чтобы сгенерированный код возвращал предсказанные метки и счета.
configurer = learnerCoderConfigurer(Mdl,X(1:50,:),'NumOutputs',2);
configurer
является ClassificationSVMCoderConfigurer
объект, который является конфигуратором кодера ClassificationSVM
объект.
Задайте атрибуты параметров кодера
Задайте атрибуты кодера параметров модели классификации SVM, чтобы можно было обновить параметры в сгенерированном коде после переобучения модели. Этот пример задает атрибуты кодера данных предиктора, которые вы хотите передать сгенерированному коду, и атрибуты кодера векторов поддержки модели SVM.
Во-первых, задайте атрибуты кодера X
чтобы сгенерированный код принял любое количество наблюдений. Измените SizeVector
и VariableDimensions
атрибуты. The SizeVector
атрибут задает верхнюю границу размера данных предиктора и VariableDimensions
атрибут определяет, имеет ли каждую размерность данных предиктора переменный размер или фиксированный размер.
configurer.X.SizeVector = [Inf 34]; configurer.X.VariableDimensions = [true false];
Размер первой размерности является количеством наблюдений. В этом случае код указывает, что верхняя граница размера Inf
и размер переменен, что означает, что X
может иметь любое количество наблюдений. Эта спецификация удобна, если вы не знаете количество наблюдений при генерации кода.
Размер второго измерения является количеством переменных. Это значение должно быть фиксировано для модели машинного обучения. X
содержит 34 предиктора, поэтому значение SizeVector
атрибут должен быть 34, и значение VariableDimensions
атрибут должен быть false
.
Если вы переобучаете модель SVM с помощью новых данных или других настроек, количество векторов поддержки может варьироваться. Поэтому задайте атрибуты кодера SupportVectors
чтобы можно было обновить векторы поддержки в сгенерированном коде.
configurer.SupportVectors.SizeVector = [250 34];
SizeVector attribute for Alpha has been modified to satisfy configuration constraints. SizeVector attribute for SupportVectorLabels has been modified to satisfy configuration constraints.
configurer.SupportVectors.VariableDimensions = [true false];
VariableDimensions attribute for Alpha has been modified to satisfy configuration constraints. VariableDimensions attribute for SupportVectorLabels has been modified to satisfy configuration constraints.
Если вы изменяете атрибуты кодера SupportVectors
, затем программное обеспечение изменяет атрибуты кодера Alpha
и SupportVectorLabels
для удовлетворения ограничениям строения. Если изменение атрибутов кодера одного параметра требует последующих изменений других зависимых параметров, чтобы удовлетворить ограничениям строения, то программное обеспечение изменяет атрибуты кодера зависимых параметров.
Сгенерируйте код
Чтобы сгенерировать код C/C + +, вы должны иметь доступ к компилятору C/C + +, который настроен правильно. MATLAB Coder находит и использует поддерживаемый, установленный компилятор. Можно использовать mex
-setup
чтобы просмотреть и изменить компилятор по умолчанию. Для получения дополнительной информации см. раздел «Изменение компилятора по умолчанию».
Использование generateCode
чтобы сгенерировать код для predict
и update
функции классификационной модели SVM (Mdl
) с настройками по умолчанию.
generateCode(configurer)
generateCode creates these files in output folder: 'initialize.m', 'predict.m', 'update.m', 'ClassificationSVMModel.mat' Code generation successful.
generateCode
генерирует файлы MATLAB, необходимые для генерации кода, включая две функции точки входа predict.m
и update.m
для predict
и update
функции Mdl
, соответственно. Затем generateCode
создает MEX-функцию с именем ClassificationSVMModel
для двух функций точки входа в codegen\mex\ClassificationSVMModel
и копирует MEX-функцию в текущую папку.
Проверьте сгенерированный код
Передайте некоторые данные предиктора, чтобы проверить, predict
ли функция
Mdl
и predict
функция в MEX-функция возвращает те же метки. Чтобы вызвать функцию точки входа в MEX-функция, которая имеет более одной точки входа, укажите имя функции в качестве первого входного параметра.
[label,score] = predict(Mdl,X);
[label_mex,score_mex] = ClassificationSVMModel('predict',X);
Сравнение label
и label_mex
при помощи isequal
.
isequal(label,label_mex)
ans = logical
1
isequal
возвращает логический 1 (true
), если все входы равны. Сравнение подтверждает, что predict
функция Mdl
и predict
функция в MEX-функция возвращает те же метки.
score_mex
могут включать круглые различия по сравнению с score
. В этом случае сравните score_mex
и score
, допускающий небольшой допуск.
find(abs(score-score_mex) > 1e-8)
ans = 0x1 empty double column vector
Сравнение подтверждает, что score
и score_mex
равны в пределах допуска 1e–8
.
Переобучите модель и параметры обновления в сгенерированном коде
Переобучите модель, используя весь набор данных.
retrainedMdl = fitcsvm(X,Y);
Извлечение параметров для обновления при помощи validatedUpdateInputs
. Эта функция обнаруживает измененные параметры модели в retrainedMdl
и подтверждает, удовлетворяют ли измененные значения параметров атрибутам кодера параметров.
params = validatedUpdateInputs(configurer,retrainedMdl);
Обновляйте параметры в сгенерированном коде.
ClassificationSVMModel('update',params)
Проверьте сгенерированный код
Сравните выходы predict
функция retrainedMdl
и predict
функция в обновленной MEX-функции.
[label,score] = predict(retrainedMdl,X);
[label_mex,score_mex] = ClassificationSVMModel('predict',X);
isequal(label,label_mex)
ans = logical
1
find(abs(score-score_mex) > 1e-8)
ans = 0x1 empty double column vector
Сравнение подтверждает, что labels
и labels_mex
равны, и значения баллов равны в пределах допуска.
Mdl
- Модель машинного обученияМодель машинного обучения, заданная как полный или компактный объект модели, как приведено в этой таблице поддерживаемых моделей.
Модель | Полный/компактный объект модели | Функция обучения |
---|---|---|
Двоичное дерево принятия решений для многоклассовой классификации | ClassificationTree , CompactClassificationTree | fitctree |
SVM для одноклассовой и двоичной классификации | ClassificationSVM , CompactClassificationSVM | fitcsvm |
Линейная модель для двоичной классификации | ClassificationLinear | fitclinear |
Многоклассовая модель для SVM и линейных моделей | ClassificationECOC , CompactClassificationECOC | fitcecoc |
Двоичное дерево решений для регрессии | RegressionTree , CompactRegressionTree | fitrtree |
Машина опорных векторов (SVM) | RegressionSVM , CompactRegressionSVM | fitrsvm |
Линейная регрессия | RegressionLinear | fitrlinear |
Для указаний по применению генерации кода и ограничений модели машинного обучения смотрите раздел Code Generation страницы объекта модели.
X
- Данные предиктораДанные предиктора для predict
функция Mdl
, заданный как n -by p числовая матрица, где n - количество наблюдений, а p - количество переменных предиктора. Чтобы вместо этого задать X
как p -by - n матрица, где наблюдения соответствуют столбцам, необходимо задать 'ObservationsIn'
аргумент пары "имя-значение" в 'columns'
. Эта опция доступна только для линейных моделей и моделей ECOC с линейными двоичными учениками.
predict
функция модели машинного обучения предсказывает метки для классификации и отклики для регрессии для данных заданного предиктора. После создания конфигуратора кодера configurer
, вы можете использовать generateCode
функция для генерации кода C/C + + для predict
функция Mdl
. Сгенерированный код принимает данные предиктора, которые имеют тот же размер и тип данных X
. Можно задать, имеет ли каждую размерность переменный или фиксированный после создания configurer
.
Например, если вы хотите сгенерировать код C/C + +, который предсказывает метки с помощью 100 наблюдений с тремя переменными предиктора, задайте X
как zeros(100,3)
. learnerCoderConfigurer
функция использует только размер и тип данных X
, а не ее значения. Поэтому X
могут быть данными предиктора или выражением MATLAB, которое представляет множество значений с определенным типом данных. Область выхода configurer
сохраняет размер и тип данных X
в X
свойство configurer
. Можно изменить размер и тип данных X
после создания configurer
. Для примера измените количество наблюдений на 200 и тип данных на single
.
configurer.X.SizeVector = [200 3];
configurer.X.DataType = 'single';
Чтобы позволить сгенерированному коду C/C + + принять данные предиктора с до 100 наблюдениями, задайте X
как zeros(100,3)
и измените VariableDimensions
свойство.
configurer.X.VariableDimensions = [1 0];
[1 0]
указывает, что первая размерность X
(количество наблюдений) имеет переменный размер и второе измерение X
(количество переменных предиктора) имеет фиксированный размер. Заданное количество наблюдений, 100 в этом примере, становится максимально допустимым количеством наблюдений в сгенерированном коде C/C + +. Чтобы разрешить любое количество наблюдений, задайте границу следующим Inf
.configurer.X.SizeVector = [Inf 3];
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
configurer = learnerCoderConfigurer(Mdl,X,'NumOutputs',2,'OutputFileName','myModel')
устанавливает количество выходов в predict
Значение 2 и задает имя файла 'myModel'
для сгенерированного кода C/C + +.'NumOutputs'
- Количество выходов в predict
Количество выходных аргументов в predict
функция модели машинного обучения Mdl
, заданная как разделенная разделенными запятой парами, состоящая из 'NumOutputs'
и положительное целое число n
.
В этой таблице перечислены выходы для predict
функция различных моделей. predict
в сгенерированном коде C/C + + возвращается первое n
выходы predict
функция в порядке, указанном в столбце Outputs.
Модель | predict Функция модели | Выходы |
---|---|---|
Двоичное дерево принятия решений для многоклассовой классификации | predict | label (предсказанные метки классов), score (апостериорные вероятности), node (номера узлов для предсказанных классов), cnum (номера классов предсказанных меток) |
SVM для одноклассовой и двоичной классификации | predict | label (предсказанные метки классов), score (счета или апостериорные вероятности) |
Линейная модель для двоичной классификации | predict | Label (предсказанные метки классов), Score (классификационные оценки) |
Многоклассовая модель для SVM и линейных моделей | predict | label (предсказанные метки классов), NegLoss (отрицательные средние двоичные потери), PBScore (оценки положительного класса) |
Двоичное дерево решений для регрессии | predict | Yfit (предсказанные отклики), node (номера узлов для предсказаний) |
Регрессия SVM | predict | yfit (предсказанные отклики) |
Линейная регрессия | predict | YHat (предсказанные отклики) |
Для примера, если вы задаете 'NumOutputs',1
для модели классификации SVM, затем predict
возвращает предсказанные метки классов в сгенерированном коде C/C + +.
После создания конфигуратора кодера configurer
можно изменить количество выходов при помощи записи через точку.
configurer.NumOutputs = 2;
The 'NumOutputs'
аргумент пары "имя-значение" эквивалентен аргументу в виде '-nargout'
опция компилятора codegen
(MATLAB Coder). Эта опция задает количество выходных аргументов в функции точки входа генерации кода. Функция объекта generateCode
конфигуратор кодера генерирует две функции точки входа - predict.m
и update.m
для predict
и update
функции Mdl
, соответственно - и генерирует код C/C + + для двух функций точки входа. Заданное значение для 'NumOutputs'
соответствует количеству выходных аргументов в predict.m
.
Пример: 'NumOutputs',2
Типы данных: single
| double
'OutputFileName'
- Имя файла сгенерированного кода C/C + +Mdl
имя объекта плюс 'Model'
(по умолчанию) | символьный вектор | строковый скалярИмя файла сгенерированного кода C/C + +, заданное как разделенная разделенными запятой парами, состоящая из 'OutputFileName'
и вектор символов или строковый скаляр.
Функция объекта generateCode
конфигуратор кодера генерирует код C/C + + с использованием этого имени файла.
Имя файла не должно содержать пространства, поскольку они могут привести к отказам генерации кода в определенных строениях операционной системы. Кроме того, имя должно быть допустимым именем функции MATLAB.
Имя файла по умолчанию является именем объекта Mdl
далее следуют 'Model'
. Для примера, если Mdl
является CompactClassificationSVM
или ClassificationSVM
объект, затем имя по умолчанию 'ClassificationSVMModel'
.
После создания конфигуратора кодера configurer
имя файла можно изменить с помощью записи через точку.
configurer.OutputFileName = 'myModel';
Пример: 'OutputFileName','myModel'
Типы данных: char
| string
'Verbose'
- Уровень подробностейtrue
(логический 1) (по умолчанию) | false
(логический 0)Уровень подробностей, заданный как разделенная разделенными запятой парами, состоящая из 'Verbose'
и любой из них true
(логический 1) или false
(логический 0). Уровень подробностей управляет отображением уведомлений в командной строке для конфигуратора кодера configurer
.
Значение | Описание |
---|---|
true (логический 1) | Программа отображает уведомления, когда изменения атрибутов кодера параметра приводят к изменениям для других зависимых параметров. |
false (логический 0) | Программа не отображает уведомления. |
Чтобы включить обновление параметров модели машинного обучения в сгенерированном коде, необходимо сконфигурировать атрибуты кодера параметров перед генерацией кода. Атрибуты параметров кодера зависят друг от друга, поэтому программное обеспечение сохраняет зависимости как ограничения строения. Если вы изменяете атрибуты кодера параметра с помощью конфигуратора кодера, и изменение требует последующих изменений других зависимых параметров, чтобы удовлетворить ограничениям строения, то программное обеспечение изменяет атрибуты кодера зависимых параметров. Уровень подробностей определяет, отображает ли программа уведомления об этих последующих изменениях.
После создания конфигуратора кодера configurer
можно изменить уровень подробностей при помощи записи через точку.
configurer.Verbose = false;
Пример: 'Verbose',false
Типы данных: logical
'ObservationsIn'
- размерность наблюдения данных предиктора'rows'
(по умолчанию) | 'columns'
Размерность наблюдения данных предиктора, заданная как разделенная разделенными запятой парами, состоящая из 'ObservationsIn'
и любой из них 'rows'
или 'columns'
. Если вы задаете 'ObservationsIn'
на 'columns'
, затем данные предиктора X
должны быть ориентированы так, чтобы наблюдения соответствовали столбцам.
Примечание
The 'columns'
опция доступна только для линейных моделей и моделей ECOC с линейными двоичными учениками.
Пример: 'ObservationsIn','columns'
configurer
- Конфигуратор кодераКонфигуратор кодера модели машинного обучения, возвращенный как один из объектов конфигуратора кодера в этой таблице.
Модель | Объект конфигуратора кодера |
---|---|
Двоичное дерево принятия решений для многоклассовой классификации | ClassificationTreeCoderConfigurer |
SVM для одноклассовой и двоичной классификации | ClassificationSVMCoderConfigurer |
Линейная модель для двоичной классификации | ClassificationLinearCoderConfigurer |
Многоклассовая модель для SVM и линейных моделей | ClassificationECOCCoderConfigurer |
Двоичное дерево решений для регрессии | RegressionTreeCoderConfigurer |
Машина опорных векторов (SVM) | RegressionSVMCoderConfigurer |
Линейная регрессия | RegressionLinearCoderConfigurer |
Используйте функции объекта и свойства объекта конфигуратора кодера, чтобы сконфигурировать опции генерации кода и сгенерировать код C/C + + для predict
и update
функции модели машинного обучения.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.