Compartir a través de


información general sobre el uso de CNTK

Para usar CNTK debe descargar los archivos binarios ejecutables o descargar el código fuente y compilarlo en el equipo (detalles). Hay tres tareas principales (o acciones) compatibles con CNTK:

  • Entrenamiento : definir una red y entrenarla para generar un modelo entrenado mediante datos de entrenamiento
  • Evaluar : prueba de un modelo entrenado para evaluar su rendimiento mediante datos de prueba
  • Implementar : use un modelo entrenado, por ejemplo, en su propia solución, para clasificar nuevas instancias.

A continuación se proporciona una breve introducción a cada una de estas tareas y se proporcionan punteros a una descripción más detallada. Además, hay otras tareas que CNTK admiten, como editar modelos existentes y escribir salidas de nodo en un archivo. En la sección Temas avanzados de la página Comandos de nivel superior se proporciona una descripción de estos temas.

Entrenamiento de un modelo mediante CNTK

El entrenamiento de una red neuronal con CNTK implica tres componentes que se deben configurar:

  • network: la red neuronal, incluidos sus parámetros de estructura o fórmula, modelo. Aquí también se incluyen los criterios de entrenamiento y la métrica de evaluación.
  • lector: cómo se leen los datos de entrenamiento
  • SGD: los hiperparámetres del proceso de degradado estocástico

Debe proporcionar esta información a través de un archivo de configuración como primer argumento al llamar al archivo ejecutable CNTK. El archivo de configuración usa una sintaxis específica. Consulte Introducción al archivo de configuración para obtener más información sobre los archivos de configuración.

A continuación, usamos la configuración de CNTK y los resultados del ejemplo MNIST, en particular la configuración "01_OneHidden_ndl_deprecated.cntk" (consulte Image/GettingStarted y 01_OneHidden.cntk para obtener detalles completos).

La línea de comandos CNTK para este ejemplo es cntk configFile=01_OneHidden_ndl_deprecated.cntk. El fragmento de código siguiente proporciona información general sobre el contenido del archivo de configuración que son pertinentes para el entrenamiento.

modelDir = "$OutputDir$/Models"
deviceId = 0
command = MNISTtrain

modelPath = "$modelDir$/01_OneHidden"

MNISTtrain = [
    action = "train"

    # network definition   
    BrainScriptNetworkBuilder = (new ComputationNetwork
        include "$ConfigDir$/01_OneHidden.bs"
    )

    # learner configuration       
    SGD = [
        ...
    ]

    # reader configuration   
    reader = [
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Train-28x28_cntk_text.txt"
        ...
    ]    
]

El fragmento de código anterior define un comando denominado MNISTtrain con action = "train". Otras acciones admitidas son, por ejemplo test , o write. El deviceId parámetro especifica si se va a usar cpu o GPU. Cuando se establece en "auto", CNTK elegirá el mejor dispositivo disponible. Establézcalo en -1 para usar la CPU o en un valor >=0 para usar una GPU específica. modelPath define dónde almacenar los modelos entrenados intermedios y finales. En este ejemplo se usa la ModelDir variable definida al principio del archivo de configuración.

Los tres bloques de configuración principales para el entrenamiento definen la propia red y los parámetros para el algoritmo de entrenamiento y el lector de datos.

  • Generador de redes: aquí se define la topología y los detalles de la red, como el tamaño y el número de capas y el tipo de nodos. Puede usar Simple Network Builder para modelos estándar o BrainScript Network Builder para los personalizados. Consulte las páginas correspondientes para obtener más información.
  • SGD: este bloque permite parametrizar el algoritmo de entrenamiento (descenso de gradiente estocástico). Las opciones configurables incluyen impulso, velocidad de aprendizaje adaptable, tamaño de minibatch adaptable, entrenamiento paralelo. Consulte El bloque SGD para obtener más detalles.
  • reader: el bloque lector define qué lector se va a usar y dónde se encuentran los archivos de entrada correspondientes. CNTK proporciona varios lectores de datos para diferentes formatos y tareas (consulte Bloque lector).

Por último, la línea command = MNISTtrain especifica cuál de las tareas definidas que se van a ejecutar. Para ejecutar varias tareas consecutivamente, por ejemplo, el entrenamiento y la evaluación, basta con agregar más tareas al comando separados por dos puntos: command = "MNISTtrain:MNISTtest".

Evaluación de un modelo entrenado

Para evaluar la precisión de un modelo entrenado, use el eval comando o test (consulte también Train, Test, Eval para obtener información completa). La configuración correspondiente en el ejemplo de MNIST 01_OneHidden.cntk tiene el siguiente aspecto.

testNetwork = {
    action = "test"
    minibatchSize = 1024    # reduce this if you run out of memory

    reader = {
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Test-28x28_cntk_text.txt"
        input = {
            features = { dim = 784 ; format = "dense" }
            labels =   { dim = 10  ; format = "dense" }
        }
    }
}

El MNISTtest bloque usa action = "test". Para la test acción, debe definir un modelo que se debe usar para realizar pruebas mediante el modelPath parámetro . En este ejemplo modelPath , no se define dentro del MNISTtest bloque, sino en el nivel superior (consulte la parte de entrenamiento anterior) y lo usan las train acciones y test . Dentro del reader bloque se especifica el archivo de datos que se debe usar para las pruebas, Test-28x28.txt en el ejemplo. Por último, debe establecer command = MNISTtest y ejecutar cntk configFile=01_OneHidden_ndl_deprecated.cntk para ejecutar las pruebas. El resultado de la línea de comandos es:

Final Results: Minibatch[1-625]: errs = 2.39% * 10000; ce = 0.076812531 * 10000; Perplexity = 1.0798396
COMPLETED!

Uso de un modelo entrenado en su propio código

Una vez entrenado un modelo, necesita la funcionalidad para evaluar el modelo en el entorno de destino. CNTK proporciona varias maneras de atender los modelos en diferentes escenarios. Puede usar un modelo entrenado de C++, Python, C# u otros lenguajes .NET. Puede ejecutar la evaluación en la máquina o en Azure. La sección Evaluación de modelos de CNTK (consulte la barra lateral) tiene muchos detalles, como la evaluación mediante C++/Python/C#/Azure.

Pasos siguientes