Partager via


Vue d’ensemble de l’utilisation de CNTK

Pour utiliser CNTK vous devez télécharger les fichiers binaires exécutables ou télécharger le code source et le compiler sur votre ordinateur (détails). Il existe trois tâches principales (ou actions) prises en charge par CNTK :

  • Entraîner - Définir un réseau et l’entraîner pour produire un modèle entraîné à l’aide de données d’entraînement
  • Évaluer - Tester un modèle entraîné pour évaluer ses performances à l’aide de données de test
  • Déployer - Utiliser un modèle entraîné, par exemple dans votre propre solution, pour classifier de nouvelles instances

Une brève vue d’ensemble de chacune de ces tâches est fournie ci-dessous et des pointeurs vers une description plus détaillée sont fournis. En outre, il existe d’autres tâches qui CNTK prennent en charge, telles que modifier des modèles existants et écrire des sorties de nœud dans un fichier. Une description de ces rubriques est fournie dans la section Rubriques avancées de la page commandes de niveau supérieur .

Formation d’un modèle à l’aide de CNTK

L’apprentissage d’un réseau neuronal avec CNTK implique trois composants qui doivent être configurés :

  • réseau : le réseau neuronal, y compris sa structure/formule, les paramètres de modèle. Les critères d’apprentissage et la métrique d’évaluation sont également inclus ici.
  • lecteur : lecture des données d’apprentissage
  • SGD : les hyper-paramètres du processus de dégradé stochastique

Vous devez fournir ces informations via un fichier de configuration comme premier argument lors de l’appel de l’exécutable CNTK. Le fichier de configuration utilise une syntaxe spécifique. Consultez la vue d’ensemble du fichier config pour plus d’informations sur les fichiers de configuration.

Dans les éléments suivants, nous utilisons la configuration CNTK et les résultats de l’exemple MNIST, en particulier la configuration « 01_OneHidden_ndl_deprecated.cntk » (voir Image/GettingStarted et 01_OneHidden.cntk pour plus d’informations).

La ligne de commande CNTK pour cet exemple est cntk configFile=01_OneHidden_ndl_deprecated.cntk. L’extrait de code suivant fournit une vue d’ensemble du contenu du fichier de configuration pertinent pour l’entraînement.

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"
        ...
    ]    
]

L’extrait de code ci-dessus définit une commande appelée MNISTtrain avec action = "train". D’autres actions prises en charge sont par exemple test ou write. Le deviceId paramètre spécifie s’il faut utiliser l’UC ou le GPU. Lorsque la valeur est "auto"définie, CNTK choisira le meilleur appareil disponible. Définissez-le pour -1 utiliser l’UC ou sur une valeur >=0 pour utiliser un GPU spécifique. L’emplacement modelPath défini pour stocker les modèles entraînés intermédiaires et finaux. Dans cet exemple, il utilise la ModelDir variable définie au début du fichier de configuration.

Les trois principaux blocs de configuration pour l’entraînement définissent le réseau lui-même et les paramètres de l’algorithme d’apprentissage et du lecteur de données.

  • Générateur de réseau : ici, vous définissez la topologie et les détails du réseau, tels que la taille et le nombre de couches et le type de nœuds. Vous pouvez utiliser le Générateur de réseau simple pour les modèles standard ou le Générateur de réseau BrainScript pour les modèles personnalisés. Reportez-vous aux pages correspondantes pour plus d’informations.
  • SGD : ce bloc vous permet de paramétrer l’algorithme d’entraînement (descente de dégradé stochastique). Les options configurables incluent l’élan, le taux d’apprentissage adaptatif, la taille de minibatch adaptative, l’entraînement parallèle. Pour plus d’informations, consultez le bloc SGD .
  • lecteur : le bloc de lecteur définit le lecteur à utiliser et où sont les fichiers d’entrée correspondants. CNTK fournit plusieurs lecteurs de données pour différents formats et tâches (voir Bloc Lecteur).

Enfin, la ligne command = MNISTtrain spécifie laquelle des tâches définies à exécuter. Pour exécuter plusieurs tâches consécutivement, par exemple la formation et l’évaluation, ajoutez simplement plus de tâches à la commande séparée par un signe deux-points : command = "MNISTtrain:MNISTtest"

Évaluation d’un modèle entraîné

Pour évaluer la précision d’un modèle entraîné, vous utilisez le ou test la eval commande (voir également Train, Test, Eval pour plus d’informations). La configuration correspondante dans l’exemple MNIST 01_OneHidden.cntk se présente comme suit.

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" }
        }
    }
}

Le MNISTtest bloc utilise action = "test". Pour l’action test que vous devez définir un modèle qui doit être utilisé pour le test à l’aide du modelPath paramètre. Dans cet exemple, il modelPath n’est pas défini à l’intérieur du MNISTtest bloc, mais au niveau supérieur (voir la partie d’entraînement ci-dessus) et est utilisé par les actions et test les train actions. Dans le reader bloc, vous spécifiez le fichier de données à utiliser pour le test, Test-28x28.txt dans l’exemple. Enfin, vous devez définir command = MNISTtest et exécuter cntk configFile=01_OneHidden_ndl_deprecated.cntk pour exécuter le test. Le résultat de la ligne de commande est le suivant :

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

Utilisation d’un modèle entraîné dans votre propre code

Une fois que vous avez entraîné un modèle, vous avez besoin de la fonctionnalité pour évaluer le modèle dans votre environnement cible. CNTK fournit plusieurs façons de servir vos modèles dans différents scénarios. Vous pouvez utiliser un modèle entraîné à partir de C++, Python, C# ou d’autres langages .NET. Vous pouvez exécuter l’évaluation sur votre ordinateur ou dans Azure. La section Évaluation des modèles CNTK (voir barre latérale) contient de nombreux détails, notamment l’évaluation à l’aide de C++/Python/C#/Azure.

Étapes suivantes