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