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.

Generación de código para predicción del modelo de aprendizaje automático utilizando MATLAB Coder App

En este ejemplo se muestra cómo generar código de C/C++ para la predicción de objetos de modelo de regresión y clasificación mediante la aplicación MATLAB® Coder™. También puede generar código en la línea de comandos mediante.codegen Ver para más detalles.Generación de código para la predicción del modelo de aprendizaje automático en la línea de comandos

Algunos objetos de modelo de clasificación y regresión tienen una o función que admite la generación de código.PredecirAleatorio Para obtener una lista de los objetos de modelo y las funciones de objeto que admiten la generación de código, consulte.Soporte de generación de código, notas de uso y limitaciones La predicción mediante estas funciones de objeto requiere un objeto de modelo de clasificación o regresión entrenado, pero una función de punto de entrada para la generación de código no puede tener estos objetos como variables de entrada. Trabaje en torno a esta limitación mediante el uso y como se describe en este ejemplo.saveCompactModelloadCompactModel

Este diagrama de flujo muestra el flujo de trabajo de generación de código para las funciones de objeto de clasificación y los objetos de modelo de regresión.

En este ejemplo, se entrena un modelo de conjunto de clasificación con los alumnos débiles más cercanos al vecino y se guarda el modelo entrenado mediante el uso.ksaveCompactModel A continuación, defina una función de punto de entrada que cargue el modelo guardado mediante y llame a la función de objeto.loadCompactModel Escribir un script para probar la función de punto de entrada. Finalmente, genere código usando la aplicación MATLAB Coder y verifique el código generado.

Modelo de clasificación de trenes

Cargue el conjunto de datos.ionosphere Este conjunto de datos tiene 34 predictores y 351 respuestas binarias para las devoluciones de radar, ya sea Bad () o Good ().'b''g'

load ionosphere

Entrenar un modelo de conjunto de clasificación con los estudiantes débiles de vecino más cercano mediante el método de subespacio aleatorio.k Para obtener más información sobre las clasificaciones que utilizan un conjunto subespacial aleatorio, consulte.Clasificación subespacial aleatoria

rng('default')  % For reproducibility learner = templateKNN('NumNeighbors',2); Mdl = fitcensemble(X,Y,'Method','Subspace','NPredToSample',5, ...     'Learners',learner,'NumLearningCycles',13);

Guardar modelo mediantesaveCompactModel

Guarde el modelo de conjunto entrenado en un archivo denominado en la carpeta actual.knnEnsemble.mat

saveCompactModel(Mdl,'knnEnsemble')

hace que el modelo de clasificación completo sea compacto y, a continuación, lo guarda en el archivo binario de MATLAB como una matriz de estructura en la carpeta actual.saveCompactModelMdlknnEnsemble.mat

Definir función de punto de entrada

Una función, también conocida como la o función, es una función que se define para la generación de código.entry-pointtop-levelprimary Debe definir una función de punto de entrada que llame a funciones habilitadas para generación de código y genere código de C/C++ a partir de la función de punto de entrada. Todas las funciones dentro de la función de punto de entrada deben admitir la generación de código.

En un archivo nuevo de la carpeta actual, defina una función de punto de entrada denominada que haga lo siguiente:myknnEnsemblePredict

  • Acepte los datos de entrada (), el nombre de archivo del modelo guardado () y los argumentos de par nombre-valor válidos de la función ().XfileNamePredecirvarargin

  • Cargue un modelo de conjunto entrenado medianteloadCompactModel.

  • Predecir etiquetas y las puntuaciones correspondientes del modelo cargado.

Puede permitir argumentos opcionales de nombre-valor especificando como un argumento de entrada.varargin Para obtener más información, consulte.Code Generation for Variable Length Argument Lists (MATLAB Coder)

type myknnEnsemblePredict.m % Display the contents of myknnEnsemblePredict.m file. 
function [label,score] = myknnEnsemblePredict(X,fileName,varargin) %#codegen CompactMdl = loadCompactModel(fileName); [label,score] = predict(CompactMdl,X,varargin{:}); end 

Agregue la Directiva del compilador (o pragma) a la función de punto de entrada después de la firma de la función para indicar que pretende generar código para el algoritmo de MATLAB.%#codegen La adición de esta directiva indica al analizador de código de MATLAB que le ayudará a diagnosticar y corregir infracciones que provocarán errores durante la generación de código. Ver.Check Code with the Code Analyzer (MATLAB Coder)

Si pulsa el botón situado en la sección superior derecha de esta página y abre este ejemplo en MATLAB®, MATLAB® abre la carpeta de ejemplo.Note: Esta carpeta incluye el archivo de función de punto de entrada () y el archivo de prueba (, que se describe más adelante).myknnEnsemblePredict.mtest_myknnEnsemblePredict.m

Configure el compilador

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)

Crear archivo de prueba

Escriba un script de prueba que llame a la función.myknnEnsemblePredict En el script de prueba, especifique los argumentos de entrada y los argumentos de par nombre-valor que utiliza en el código generado. Utilice esta secuencia de comandos de prueba para definir automáticamente los tipos de entrada al generar código mediante la aplicación MATLAB Coder.

En este ejemplo, cree el archivo en su carpeta actual, como se muestra.test_myknnEnsemblePredict.m

type test_myknnEnsemblePredict.m % Display the contents of test_myknnEnsemblePredict.m file. 
%% Load Sample data load ionosphere  %% Test myknnEnsemblePredict [label,score] = myknnEnsemblePredict(X,'knnEnsemble','Learners',1:13); 

Para obtener más información, consulte.Automatically Define Input Types by Using the App (MATLAB Coder)

Generar código utilizando MATLAB Coder App

La aplicación MATLAB Coder genera código de C o C++ a partir del código MATLAB®. La interfaz de usuario basada en flujo de trabajo le guiará por el proceso de generación de código. Los siguientes pasos describen un breve flujo de trabajo de la aplicación de código de MATLAB. Para obtener más información, consulte y.MATLAB CoderGenerate C Code by Using the MATLAB Coder App (MATLAB Coder)

1. Open the MATLAB Code App and Select the Entry-Point Function File.

En la pestaña, en la sección, haga clic en la flecha para abrir la galería de aplicaciones.AppsAppsShow more En, haga clic en.Generación de códigoMATLAB Coder La aplicación abre la página.Select Source Files Introduzca o seleccione el nombre de la función de punto de entrada,.myknnEnsemblePredict

Haga clic para ir a la página.NextDefine Input Types

2. Define Input Types

Dado que C utiliza la tipificación estática, MATLAB Coder debe determinar las propiedades de todas las variables en los archivos de MATLAB en tiempo de compilación. Por lo tanto, debe especificar las propiedades de las entradas de la función de punto de entrada.

Escriba o seleccione el script de prueba y haga clic en.test_myknnEnsemblePredictAutodefine Input Types

La aplicación MATLAB Coder reconoce los tipos de entrada de la función en función del script de prueba.myknnEnsemblePredict

Modifique los tipos de entrada:

  • — La aplicación deduce que la entrada es.XXdouble(351x34) El número de predictores debe fijarse para que sea el mismo que el número de predictores en el modelo entrenado. Sin embargo, puede tener un número diferente de observaciones para la predicción. Si se desconoce el número de observaciones, cambie a o.double(351x34)double(:351x34)double(:infx34) El ajuste permite el número de observaciones hasta 351, y la configuración permite un número ilimitado de observaciones.double(:351x34)double(:infx34) En este ejemplo, especifique haciendo clic y seleccionando.double(:infx34)351:inf

  • : Haga clic enfileName char, seleccione y escriba el nombre de archivo con comillas simples.Define Constant'knnEnsemble'

  • : Los nombres de los argumentos de par nombre-valor deben ser constantes de tiempo de compilación.varargin{1} Haga clic char, seleccione y escriba.Define Constant'Learners'

  • : Para permitir índices definidos por el usuario hasta 13 alumnos débiles en el código generado, cambie a.varargin{2}double(1x13)double(1x:13)

Haga clic para ir a la página.Next Check for Run-Time Issues Este paso opcional genera un archivo MEX, ejecuta la función MEX, y los problemas de los informes. Haga clic para ir a la página.NextGenerar código

3. Generate C Code

Ajuste a MEX y haga clic.Build typeGenerate La aplicación genera una función MEX,.myknnEnsemblePredict_mex Una función MEX es un programa de C/C++ que es ejecutable desde MATLAB. Puede utilizar una función MEX para acelerar los algoritmos de MATLAB y probar el código generado para la funcionalidad y los problemas de tiempo de ejecución. Para obtener más información, consulte y.MATLAB Algorithm Acceleration (MATLAB Coder)Why Test MEX Functions in MATLAB? (MATLAB Coder)

En función del tipo de compilación especificado, MATLAB Coder genera una función MEX o código independiente de C/C++ compilado en una biblioteca estática, una biblioteca vinculada dinámica o un ejecutable. Para obtener más información sobre cómo establecer un tipo de compilación, consulte.Configure Build Settings (MATLAB Coder)

Haga clic para ir a la página.NextFinish Workflow

4. Review the Finish Workflow Page

La página indica que la generación de código se realizó correctamente.Finish Workflow Esta página también proporciona un resumen del proyecto y vínculos a la salida generada.

Generar código mediante script

Puede convertir un proyecto de MATLAB Coder en el script equivalente de los comandos de MATLAB después de definir los tipos de entrada. A continuación, ejecute el script para generar código. Para obtener más información, consulte.Convert MATLAB Coder Project to MATLAB Script (MATLAB Coder)

En la barra de herramientas de la aplicación MATLAB Coder, haga clic en el botón.Open action menu

Seleccione y, a continuación, haga clic.Convert to scriptSave La aplicación crea el archivo, que reproduce el proyecto en un objeto de configuración y ejecuta la función.myknnEnsemblePredict_script.mcodegen

Mostrar el contenido del archivo.myknnEnsemblePredict_script.m

type myknnEnsemblePredict_script.m
% MYKNNENSEMBLEPREDICT_SCRIPT   Generate MEX-function myknnEnsemblePredict_mex %  from myknnEnsemblePredict. %  % Script generated from project 'myknnEnsemblePredict.prj' on 17-Nov-2017. %  % See also CODER, CODER.CONFIG, CODER.TYPEOF, CODEGEN.  %% Create configuration object of class 'coder.MexCodeConfig'. cfg = coder.config('mex'); cfg.GenerateReport = true; cfg.ReportPotentialDifferences = false;  %% Define argument types for entry-point 'myknnEnsemblePredict'. ARGS = cell(1,1); ARGS{1} = cell(4,1); ARGS{1}{1} = coder.typeof(0,[Inf  34],[1 0]); ARGS{1}{2} = coder.Constant('knnEnsemble'); ARGS{1}{3} = coder.Constant('Learners'); ARGS{1}{4} = coder.typeof(0,[1 13],[0 1]);  %% Invoke MATLAB Coder. codegen -config cfg myknnEnsemblePredict -args ARGS{1} -nargout 2 

Ejecute el script.

myknnEnsemblePredict_script
Code generation successful: To view the report, open('codegen/mex/myknnEnsemblePredict/html/report.mldatx'). 

Compruebe que el código generado

Pruebe una función MEX para comprobar que el código generado proporciona la misma funcionalidad que el código original de MATLAB. Para realizar esta prueba, ejecute la función MEX utilizando las mismas entradas que usó para ejecutar el código original de MATLAB y, a continuación, compare los resultados. La ejecución de la función MEX en MATLAB antes de generar código independiente también le permite detectar y corregir errores en tiempo de ejecución que son mucho más difíciles de diagnosticar en el código independiente generado. Para obtener más información, consulte.Why Test MEX Functions in MATLAB? (MATLAB Coder)

Pasar algunos Datos predictores para verificar que y la función MEX devuelven los mismos resultados.myknnEnsemblePredict

[label1,score1] = predict(Mdl,X,'Learners',1:10); [label2,score2] = myknnEnsemblePredict(X,'knnEnsemble','Learners',1:10); [label3,score3] = myknnEnsemblePredict_mex(X,'knnEnsemble','Learners',1:10);

Compare, y usando.label1label2label3isequal

isequal(label1,label2,label3)
ans = logical
   1

Devuelve Logical 1 (), lo que significa que todas las entradas son iguales.isequaltrue

La salida de la función MEX puede incluir diferencias de redondeo en comparación con la salida de la función.score3Predecir En este caso, compare y, permitiendo una pequeña tolerancia.score1score3

find(abs(score1-score3) > 1e-12)
ans =    0x1 empty double column vector 

Devuelve un vector vacío si la diferencia absoluta de elemento-sabio entre y no es mayor que la tolerancia especificada.findscore1score31e-12 Las comparaciones confirman que y la función MEX devuelven los mismos resultados.myknnEnsemblePredict

Consulte también

| | |

Temas relacionados