Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

generateCode

Generar código de C/C++ mediante el configurador de codificador

Descripción

Después de entrenar un modelo de aprendizaje automático, cree un configurador de codificador para el modelo mediante.learnerCoderConfigurer Modifique las propiedades del configurador para especificar las opciones de generación de código. A continuación, se usa para generar código de C/C++ para las funciones del modelo de aprendizaje automático.generateCodePredecirupdate La generación de código C/C++ requiere MATLAB®Coder™.

Este diagrama de flujo muestra el flujo de trabajo de generación de código utilizando un configurador de codificador. Uso generateCode para el paso resaltado.

ejemplo

generateCode(configurer) genera una función MEX (ejecutable) para las funciones de un modelo de aprendizaje automático mediante el uso.MATLABPredecirupdateconfigurer La función MEX generada se nombra outputFileName, que es el nombre de archivo almacenado en la propiedad.OutputFileNameconfigurer

Para generar una función MEX, primero genera los siguientes archivos requeridos para generar código y los almacena en la carpeta actual:generateCodeMATLAB

  • , y son las funciones de punto de entrada para las funciones del modelo de aprendizaje automático, respectivamente, y estas dos funciones llaman.predict.mupdate.minitialize.mpredict.mupdate.mPredecirupdateinitialize.m

  • Un archivo MAT que incluye información del modelo de aprendizaje automático: utiliza la función para guardar la información del modelo de aprendizaje automático en un archivo MAT cuyo nombre de archivo se almacena en la propiedad de un configurador de codificador. carga el archivo MAT guardado mediante la función.generateCodesaveCompactModelOutputFileNameinitialize.mloadCompactModel

Después de generar los archivos necesarios, crea la función MEX y el código para la función MEX en elMATLABgenerateCodecodegen\mex\outputFileName carpeta y copia la función MEX a la carpeta actual.

ejemplo

generateCode(configurer,cfg) genera código de C/C++ mediante el tipo de compilación especificado por.cfg

ejemplo

generateCode(___,'OutputPath',outputPath) Especifica la ruta de acceso de carpeta para los archivos de salida, además de cualquiera de los argumentos de entrada en las sintaxis anteriores. genera los archivos en la carpeta especificada por y genera código de C/C++ en la carpetagenerateCodeMATLABoutputPath outputPath\codegen\type\outputFileName Dónde type es el tipo de compilación especificado por.cfg

Ejemplos

contraer todo

Entrenar un modelo de aprendizaje automático y, a continuación, generar código para las funciones y el modelo mediante el uso de un configurador de codificador.Predecirupdate

Cargue el conjunto de datos y capacite a un modelo de regresión de máquina de vectores de soporte (SVM).carsmall

load carsmall X = [Horsepower,Weight]; Y = MPG; Mdl = fitrsvm(X,Y);

es un objeto.MdlRegressionSVM

Cree un configurador de codificador para el modelo utilizando.RegressionSVMlearnerCoderConfigurer Especifique los datos del predictor.X La función utiliza la entrada para configurar los atributos del codificador de la entrada de función.learnerCoderConfigurerXPredecir

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  

es un objeto, que es un configurador de codificador de un objeto.configurerRegressionSVMCoderConfigurerRegressionSVM

Para generar código de C/C++, debe tener acceso a un compilador de C/C++ que esté configurado correctamente. MATLAB Coder localiza y utiliza un compilador compatible e instalado. Puede usar para ver y cambiar el compilador predeterminado.mex-setup Para obtener más información, consulte.Cambiar el compilador predeterminado (MATLAB)

Genere código para las funciones y el modelo de regresión de SVM () con la configuración predeterminada.PredecirupdateMdl

generateCode(configurer)
generateCode creates these files in output folder: 'initialize.m', 'predict.m', 'update.m', 'RegressionSVMModel.mat' 

La función completa estas acciones:generateCode

  • Genere los archivos de MATLAB necesarios para generar código, incluidas las dos funciones de punto de entrada y para las funciones de, respectivamente.predict.mupdate.mPredecirupdateMdl

  • Cree una función MEX denominada para las dos funciones de punto de entrada.RegressionSVMModel

  • Cree el código para la función MEX en la carpeta.codegen\mex\RegressionSVMModel

  • Copie la función MEX a la carpeta actual.

Mostrar el contenido de la, y los archivos mediante la función.predict.mupdate.minitialize.mtype

type predict.m
function varargout = predict(X,varargin) %#codegen % Autogenerated by MATLAB,  09-Feb-2019 00:40:54 [varargout{1:nargout}] = initialize('predict',X,varargin{:}); end 
type update.m
function update(varargin) %#codegen % Autogenerated by MATLAB,  09-Feb-2019 00:40:54 initialize('update',varargin{:}); end 
type initialize.m
function [varargout] = initialize(command,varargin) %#codegen % Autogenerated by MATLAB, 09-Feb-2019 00:40:54 coder.inline('always'); persistent model; if isempty(model)     model = loadCompactModel('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 

Entrenar un modelo de aprendizaje automático y generar código mediante el configurador de codificador del modelo entrenado. Al generar código, especifique el tipo de compilación y otras opciones de configuración mediante un objeto de configuración de generación de código.

Cargue el conjunto de datos y capacite a un modelo de clasificación de máquina de vectores de soporte binario (SVM).ionosphere

load ionosphere Mdl = fitcsvm(X,Y);

es un objeto.MdlClassificationSVM

Cree un configurador de codificador para el modelo utilizando.ClassificationSVMlearnerCoderConfigurer Especifique los datos del predictor.X La función utiliza la entrada para configurar los atributos del codificador de la entrada de función.learnerCoderConfigurerXPredecir

configurer = learnerCoderConfigurer(Mdl,X);

es un objeto, que es un configurador de codificador de un objeto.configurerClassificationSVMCoderConfigurerClassificationSVM

Cree un objeto de configuración de generación de código mediante.coder.config Especifique para generar una biblioteca dinámica y especifique la propiedad para habilitar el informe de generación de código.'dll'GenerateReporttrue

cfg = coder.config('dll'); cfg.GenerateReport = true;

Para generar código de C/C++, debe tener acceso a un compilador de C/C++ que esté configurado correctamente. MATLAB Coder localiza y utiliza un compilador compatible e instalado. Puede usar para ver y cambiar el compilador predeterminado.mex-setup Para obtener más información, consulte.Cambiar el compilador predeterminado (MATLAB)

Use y el objeto de configuración para generar código.generateCodecfg Además, especifique la ruta de la carpeta de salida.

generateCode(configurer,cfg,'OutputPath','testPath')
Specified folder does not exist. Folder has been created. generateCode creates these files in output folder: 'initialize.m', 'predict.m', 'update.m', 'ClassificationSVMModel.mat' Code generation successful: To view the report, open('codegen/dll/ClassificationSVMModel/html/report.mldatx'). 

crea la carpeta especificada.generateCode La función también genera los archivos MATLAB necesarios para generar código y almacenarlos en la carpeta. A continuación, genera código C en la carpeta.generateCodetestPath\codegen\dll\ClassificationSVMModel

Entrenar un modelo de códigos de salida de corrección de errores (ECOC) utilizando estudiantes binarios de SVM y crear un configurador de codificador para el modelo. Utilice las propiedades del configurador del codificador para especificar los atributos del codificador de los parámetros del modelo ECOC. Utilice la función de objeto del configurador del codificador para generar código C que predice etiquetas para nuevos Datos predictores. A continuación, vuelva a entrenar el modelo utilizando diferentes configuraciones y actualice los parámetros en el código generado sin regenerar el código.

Entrenar modelo

Cargue el conjunto de datos de iris de Fisher.

load fisheriris X = meas; Y = species;

Cree una plantilla de aprendizaje binario de SVM para utilizar una función del kernel gaussiano y para estandarizar los Datos predictores.

t = templateSVM('KernelFunction','gaussian','Standardize',true);

Entrenar un modelo ECOC multiclase utilizando la plantilla.t

Mdl = fitcecoc(X,Y,'Learners',t);

es un objeto.MdlClassificationECOC

Cree el configurador del codificador

Cree un configurador de codificador para el modelo utilizando.ClassificationECOClearnerCoderConfigurer Especifique los datos del predictor.X La función utiliza la entrada para configurar los atributos del codificador de la entrada de función.learnerCoderConfigurerXPredecir Además, establezca el número de salidas en 2 para que el código generado devuelva las dos primeras salidas de la función, que son las etiquetas pronosticadas y las pérdidas binarias promedio negadas.predict

configurer = learnerCoderConfigurer(Mdl,X,'NumOutputs',2)
configurer =    ClassificationECOCCoderConfigurer with properties:     Update Inputs:     BinaryLearners: [1×1 ClassificationSVMCoderConfigurer]              Prior: [1×1 LearnerCoderInput]               Cost: [1×1 LearnerCoderInput]     Predict Inputs:                  X: [1×1 LearnerCoderInput]     Code Generation Parameters:         NumOutputs: 2     OutputFileName: 'ClassificationECOCModel'     Properties, Methods  

es un objeto, que es un configurador de codificador de un objeto.configurerClassificationECOCCoderConfigurerClassificationECOC La pantalla muestra los argumentos de entrada ajustables de y:,,, y.PredecirupdateXBinaryLearnersPriorCosto

Especificar atributos de codificador de parámetros

Especifique los atributos del codificador de argumentos (Datos predictores y los argumentos de par nombre-valor y) y argumentos (vectores de soporte de los alumnos de SVM) para que pueda utilizar estos argumentos como argumentos de entrada y en el código generado.Predecir'Decoding''BinaryLoss'updatePredecirupdate

En primer lugar, especifique los atributos del codificador de modo que el código generado acepte cualquier número de observaciones.X Modifique los atributos y.SizeVectorVariableDimensions El atributo especifica el límite superior del tamaño de los Datos predictores y el atributo especifica si cada dimensión de los Datos predictores tiene un tamaño variable o un tamaño fijo.SizeVectorVariableDimensions

configurer.X.SizeVector = [Inf 4]; configurer.X.VariableDimensions = [true false];

El tamaño de la primera dimensión es el número de observaciones. En este caso, el código especifica que el límite superior del tamaño es y el tamaño es variable, lo que significa que puede tener cualquier número de observaciones.InfX Esta especificación es conveniente si no conoce el número de observaciones al generar código.

El tamaño de la segunda dimensión es el número de variables predictoras. Este valor debe fijarse para un modelo de aprendizaje automático. contiene 4 predictores, por lo que el segundo valor del atributo debe ser 4 y el segundo valor del atributo debe ser.XSizeVectorVariableDimensionsfalse

A continuación, modifique los atributos del codificador y utilice los argumentos de par nombre-valor en el código generado.BinaryLossDecoding'BinaryLoss''Decoding' Mostrar los atributos del codificador de.BinaryLoss

configurer.BinaryLoss
ans =    EnumeratedInput with properties:               Value: 'hinge'     SelectedOption: 'Built-in'     BuiltInOptions: {'hamming'  'linear'  'quadratic'  'exponential'  'binodeviance'  'hinge'  'logit'}         IsConstant: 1         Tunability: 0  

Para usar un valor no predeterminado en el código generado, debe especificar el valor antes de generar el código. Especifique el atributo de as.ValueBinaryLoss'exponential'

configurer.BinaryLoss.Value = 'exponential'; configurer.BinaryLoss
ans =    EnumeratedInput with properties:               Value: 'exponential'     SelectedOption: 'Built-in'     BuiltInOptions: {'hamming'  'linear'  'quadratic'  'exponential'  'binodeviance'  'hinge'  'logit'}         IsConstant: 1         Tunability: 1  

Si modifica valores de atributo cuando es (lógico 0), el software establece la a (lógica 1).TunabilityfalseTunabilitytrue

Mostrar los atributos del codificador de.Decoding

configurer.Decoding
ans =    EnumeratedInput with properties:               Value: 'lossweighted'     SelectedOption: 'Built-in'     BuiltInOptions: {'lossweighted'  'lossbased'}         IsConstant: 1         Tunability: 0  

Especifique el atributo de tal manera que pueda utilizar todos los valores disponibles en el código generado.IsConstantDecodingfalseBuiltInOptions

configurer.Decoding.IsConstant = false; configurer.Decoding
ans =    EnumeratedInput with properties:               Value: [1×1 LearnerCoderInput]     SelectedOption: 'NonConstant'     BuiltInOptions: {'lossweighted'  'lossbased'}         IsConstant: 0         Tunability: 1  

El software cambia el atributo de a un objeto para que pueda utilizar ambos y ' como el valor de.ValueDecodingLearnerCoderInput'lossweighted''lossbased'Decoding' Además, el software establece el to y el to.SelectedOption'NonConstant'Tunabilitytrue

Por último, modifique los atributos de codificador de in.SupportVectorsBinaryLearners Mostrar los atributos del codificador de.SupportVectors

configurer.BinaryLearners.SupportVectors
ans =    LearnerCoderInput with properties:              SizeVector: [54 4]     VariableDimensions: [1 0]               DataType: 'double'             Tunability: 1  

El valor predeterminado es porque cada alumno tiene un número diferente de vectores de soporte.VariableDimensions[true false] Si vuelve a entrenar el modelo ECOC con nuevos datos o diferentes configuraciones, el número de vectores de soporte en los alumnos de SVM puede variar. Por lo tanto, aumente el límite superior del número de vectores de soporte.

configurer.BinaryLearners.SupportVectors.SizeVector = [150 4];
SizeVector attribute for Alpha has been modified to satisfy configuration constraints. SizeVector attribute for SupportVectorLabels has been modified to satisfy configuration constraints. 

Si usted modifica los atributos del codificador de, después el software modifica los atributos del codificador de y para satisfacer las restricciones de configuración.SupportVectorsAlphaSupportVectorLabels Si la modificación de los atributos del codificador de un parámetro requiere cambios subsiguientes en otros parámetros dependientes para satisfacer las restricciones de configuración, el software cambia los atributos del codificador de los parámetros dependientes.

Visualice el configurador del codificador.

configurer
configurer =    ClassificationECOCCoderConfigurer with properties:     Update Inputs:     BinaryLearners: [1×1 ClassificationSVMCoderConfigurer]              Prior: [1×1 LearnerCoderInput]               Cost: [1×1 LearnerCoderInput]     Predict Inputs:                  X: [1×1 LearnerCoderInput]         BinaryLoss: [1×1 EnumeratedInput]           Decoding: [1×1 EnumeratedInput]     Code Generation Parameters:         NumOutputs: 2     OutputFileName: 'ClassificationECOCModel'     Properties, Methods  

La pantalla ahora incluye y también.BinaryLossDecoding

Generar código

Para generar código de C/C++, debe tener acceso a un compilador de C/C++ que esté configurado correctamente. MATLAB Coder localiza y utiliza un compilador compatible e instalado. Puede usar para ver y cambiar el compilador predeterminado.mex-setup Para obtener más información, consulte.Cambiar el compilador predeterminado (MATLAB)

Genere código para las funciones del modelo de clasificación ECOC () con la configuración predeterminada.PredecirupdateMdl

generateCode(configurer)
generateCode creates these files in output folder: 'initialize.m', 'predict.m', 'update.m', 'ClassificationECOCModel.mat' 

La función completa estas acciones:generateCode

  • Genere los archivos de MATLAB necesarios para generar código, incluidas las dos funciones de punto de entrada y para las funciones de, respectivamente.predict.mupdate.mPredecirupdateMdl

  • Cree una función MEX denominada para las dos funciones de punto de entrada.ClassificationECOCModel

  • Cree el código para la función MEX en la carpeta.codegen\mex\ClassificationECOCModel

  • Copie la función MEX a la carpeta actual.

Compruebe que el código generado

Pasar algunos Datos predictores para comprobar si la función de y la función en la función MEX devuelven las mismas etiquetas.PredecirMdlPredecir Para llamar a una función de punto de entrada en una función MEX que tiene más de un punto de entrada, especifique el nombre de la función como el primer argumento de entrada. Dado que especificó como un argumento de entrada ajustable cambiando el atributo antes de generar el código, también debe especificarlo en la llamada a la función MEX, aunque es el valor predeterminado de.'Decoding'IsConstant'lossweighted''Decoding'

[label,NegLoss] = predict(Mdl,X,'BinaryLoss','exponential'); [label_mex,NegLoss_mex] = ClassificationECOCModel('predict',X,'BinaryLoss','exponential','Decoding','lossweighted');

Comparar con mediante el uso de.Etiquetalabel_mexisequal

isequal(label,label_mex)
ans = logical
   1

Devuelve Logical 1 () si todas las entradas son iguales.isequaltrue La comparación confirma que la función y la función de la función MEX devuelven las mismas etiquetas.PredecirMdlPredecir

puede incluir diferencias de redondeo en comparación con.NegLoss_mexNegLoss En este caso, compare con, permitiendo una pequeña tolerancia.NegLoss_mexNegLoss

find(abs(NegLoss-NegLoss_mex) > 1e-8)
ans =    0×1 empty double column vector 

La comparación confirma que y son iguales dentro de la tolerancia.NegLossNegLoss_mex1e–8

Reentrenar modelo y actualizar parámetros en código generado

Vuelva a entrenar el modelo con un ajuste diferente. Especifique como para que el software seleccione un factor de escala adecuado mediante un procedimiento heurístico.'KernelScale''auto'

t_new = templateSVM('KernelFunction','gaussian','Standardize',true,'KernelScale','auto'); retrainedMdl = fitcecoc(X,Y,'Learners',t_new);

Extraiga los parámetros que desea actualizar mediante.validatedUpdateInputs Esta función detecta los parámetros del modelo modificados y valida si los valores de parámetro modificados satisfacen los atributos del codificador de los parámetros.retrainedMdl

params = validatedUpdateInputs(configurer,retrainedMdl);

Actualizar los parámetros en el código generado.

ClassificationECOCModel('update',params)

Compruebe que el código generado

Compare las salidas de la función de las salidas de la función en la función MEX actualizada.PredecirretrainedMdlPredecir

[label,NegLoss] = predict(retrainedMdl,X,'BinaryLoss','exponential','Decoding','lossbased'); [label_mex,NegLoss_mex] = ClassificationECOCModel('predict',X,'BinaryLoss','exponential','Decoding','lossbased'); isequal(label,label_mex)
ans = logical
   1

find(abs(NegLoss-NegLoss_mex) > 1e-8)
ans =    0×1 empty double column vector 

La comparación confirma que y son iguales, y son iguales dentro de la tolerancia.labelslabels_mexNegLossNegLoss_mex

Argumentos de entrada

contraer todo

Configurador de codificador de un modelo de aprendizaje automático, especificado como un objeto de configurador de codificador creado mediante el uso.learnerCoderConfigurer

ModeloCoder Configurer Object
Regresión de máquina de vectores de soporte (SVM)RegressionSVMCoderConfigurer
SVM para la clasificación de una clase y binariaClassificationSVMCoderConfigurer
Modelo multiclase para SVMsClassificationECOCCoderConfigurer

Tipo de compilación, especificado como,, o un objeto de configuración de generación de código creado por.'mex''dll''lib'coder.config

genera código de C/C++ mediante uno de los siguientes tipos de compilación.generateCode

  • : Genera una función MEX que tiene una extensión dependiente de la plataforma.'mex' Una función MEX es un programa de C/C++ que es ejecutable desde la ventana de comandos. Antes de generar una biblioteca de C/C++ para la implementación, genere una función MEX para comprobar que el código generado proporciona la funcionalidad correcta.

  • : Genere una biblioteca dinámica de C/C++.'dll'

  • : Genere una biblioteca estática de C/C++.'lib'

  • Objeto de configuración de generación de código creado por: generar código de C/C++ mediante el objeto de configuración de generación de código para personalizar las opciones de generación de código.coder.config Puede especificar el tipo de compilación y otras opciones de configuración mediante el objeto. Por ejemplo, modifique el parámetro para habilitar el informe de generación de código y modifique el parámetro para generar código de C++.GenerateReportTargetLang El valor predeterminado del parámetro es, generando código C. Para obtener más información, consulte la opción de, y.TargetLang'C'

    cfg = coder.config('mex'); cfg.GenerateReport = true; cfg.TargetLang = 'C++';
    -configcodegencoder.configConfigure Build Settings (MATLAB Coder)

genera código de C/C++ en la carpetagenerateCode outputPath\codegen\type\outputFileNameDónde type es el tipo de compilación especificado por el argumento ycfg outputFileName es el nombre de archivo almacenado en la propiedad de.OutputFileNameconfigurer

Ruta de carpeta para los archivos de salida de generateCode, especificado como un vector de caracteres o una matriz de cadenas.

La ruta de acceso de carpeta especificada puede ser una ruta de acceso absoluta o una ruta relativa a la ruta de la carpeta actual.

  • La ruta de acceso no debe contener espacios porque pueden provocar errores de generación de código en determinadas configuraciones del sistema operativo.

  • La ruta de acceso tampoco puede contener caracteres ASCII que no sean de 7 bits, como caracteres japoneses.

Si la carpeta especificada no existe, generateCode crea la carpeta.

generateCode busca en la carpeta especificada los cuatro archivos:,, y un archivo MAT que incluye información del modelo de aprendizaje automático.MATLABpredict.mupdate.minitialize.m Si los cuatro archivos no existen en la carpeta, generateCode genera los archivos. Lo contrario generateCode no genera ningún archivo.MATLAB

genera código de C/C++ en la carpetagenerateCode outputPath\codegen\type\outputFileNameDónde type es el tipo de compilación especificado por el argumento ycfg outputFileName es el nombre de archivo almacenado en la propiedad de.OutputFileNameconfigurer

Ejemplo: 'C:\myfiles'

Tipos de datos: char | string

Limitaciones

Funcionalidad alternativa

  • Si desea modificar los archivos (, y) según el flujo de trabajo de generación de código, a continuación, utilizar para generar estos archivos y utilizar para generar código.MATLABpredict.mupdate.minitialize.mgenerateFilescodegen

Introducido en R2018b