你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

CNTK使用情况概述

若要使用CNTK需要下载可执行二进制文件或下载源代码,并在计算机上编译源代码, (详细信息) 。 CNTK支持三个主要任务 (或操作) :

  • 训练 - 定义网络并训练它以使用训练数据生成已训练的模型
  • 评估 - 测试已训练的模型以使用测试数据评估其性能
  • 部署 - 使用经过训练的模型(例如在自己的解决方案中)对新实例进行分类

下面提供了其中每个任务的简要概述,并提供了指向更详细说明的指针。 此外,还有CNTK支持的其他任务,例如编辑现有模型和将节点输出写入文件。 顶级 命令 页上的“高级主题”部分提供了这些说明。

使用 CNTK 训练模型

使用 CNTK 训练神经网络涉及必须配置的三个组件:

  • network:神经网络,包括其结构/公式、模型参数。 此处还包括训练条件和评估指标。
  • 读取者:如何读取训练数据
  • SGD:随机梯度过程的超参数

调用CNTK可执行文件时,需要通过配置文件提供此信息作为第一个参数。 配置文件使用特定语法。 有关配置文件的详细信息 ,请参阅配置文件概述

在下面,我们使用 MNIST 示例中的CNTK配置和结果,特别是配置“01_OneHidden_ndl_deprecated.cntk” (请参阅 Image/GettingStarted01_OneHidden.cntk 了解完整详细信息) 。

此示例的CNTK命令行为 cntk configFile=01_OneHidden_ndl_deprecated.cntk。 以下代码片段概述了与训练相关的配置文件内容。

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

The above code snippet defines a command called MNISTtrain with action = "train". 其他受支持的操作例如 testwrite。 参数 deviceId 指定是使用 CPU 还是 GPU。 设置为 "auto"“设置为”时,CNTK将选取最佳可用设备。 将其设置为 -1 使用 CPU 或值 >=0 以使用特定 GPU。 定义 modelPath 存储中间模型和最终训练模型的位置。 在此示例中, ModelDir 它使用配置文件开头定义的变量。

用于训练的三个主要配置块定义网络本身以及训练算法和数据读取器的参数。

  • 网络生成器 - 此处定义拓扑和网络的详细信息,例如层的大小和数量以及节点类型。 可以将 简单网络生成器 用于标准模型或用于自定义模型的 BrainScript 网络生成器 。 有关详细信息,请参阅相应的页面。
  • SGD - 此块允许你参数化训练算法 (随机梯度下降) 。 可配置的选项包括动量、自适应学习速率、自适应迷你包大小、并行训练。 有关详细信息,请参阅 SGD块
  • 读取器 - 读取器块定义要使用的读取器以及相应的输入文件的位置。 CNTK为不同的格式和任务提供多个数据读取器, (请参阅读取器块) 。

最后,该行 command = MNISTtrain 指定要执行哪些定义的任务。 若要连续执行多个任务,例如训练和评估,只需将更多任务添加到由冒号分隔的命令中: command = "MNISTtrain:MNISTtest"

评估已训练的模型

若要评估训练模型的准确性,请使用 evaltest 命令 (另请参阅 训练、测试、Eval 以了解完整详细信息) 。 MNIST 01_OneHidden.cntk 示例中的相应配置如下所示。

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

MNISTtest 使用 action = "test"。 对于操作, test 需要定义应用于使用参数进行测试的 modelPath 模型。 在此示例中,modelPath未在块内MNISTtest定义,但在顶级 (查看) 上方的训练部分,并由操作traintest使用。 在块中 reader ,在示例中指定应用于测试 Test-28x28.txt 的数据文件。 最后,必须设置 command = MNISTtest 并运行 cntk configFile=01_OneHidden_ndl_deprecated.cntk 以执行测试。 命令行上的结果为:

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

在自己的代码中使用已训练的模型

训练模型后,需要功能来评估目标环境中的模型。 CNTK提供了多种在不同方案中为模型提供服务的方法。 可以使用 C++、Python、C# 或其他 .NET 语言的已训练模型。 可以在计算机或 Azure 中运行评估。 评估CNTK模型 (部分查看边栏) 有许多详细信息,包括使用 C++/Python/C#/Azure 进行评估。

后续步骤