Поделиться через


Обзор использования CNTK

Чтобы использовать CNTK необходимо скачать исполняемые двоичные файлы или скачать исходный код и скомпилировать его на компьютере (сведения). Существует три основных задачи (или действия), которые поддерживаются CNTK:

  • Обучение — определение сети и ее обучение для создания обученной модели с помощью обучающих данных
  • Оценка — тестирование обученной модели для оценки ее производительности с помощью тестовых данных
  • Развертывание . Используйте обученную модель, например в собственном решении, для классификации новых экземпляров

Ниже приведен краткий обзор каждой из этих задач, а также приведены указатели на более подробное описание. Кроме того, существуют и другие задачи, которые CNTK поддерживают, такие как изменение существующих моделей и запись выходных данных узла в файл. Описание этих разделов приведено в разделе "Дополнительные разделы" на странице команд верхнего уровня .

Обучение модели с помощью CNTK

Обучение нейронной сети с помощью CNTK включает в себя три компонента, которые необходимо настроить:

  • сеть: нейронная сеть, включая ее структуру или формулу, параметры модели. Здесь также включены критерии обучения и метрика оценки.
  • читатель: как считываются обучающие данные
  • ГРАДиентный процесс: гиперпараметров процесса стохастического градиента

Эти сведения необходимо предоставить через файл конфигурации в качестве первого аргумента при вызове исполняемого файла CNTK. В файле конфигурации используется определенный синтаксис. Дополнительные сведения о файлах конфигурации см. в разделе "Общие сведения о файлах конфигурации".

В следующем примере мы используем конфигурацию CNTK и результаты из примера MNIST, в частности конфигурацию "01_OneHidden_ndl_deprecated.cntk" (подробные сведения см. в разделе Image/GettingStarted и 01_OneHidden.cntk).

В этом примере используется cntk configFile=01_OneHidden_ndl_deprecated.cntkкомандная строка 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"
        ...
    ]    
]

Приведенный выше фрагмент кода определяет команду, вызываемую MNISTtrain с action = "train"помощью . Другие поддерживаемые действия, например test или write. Параметр deviceId указывает, следует ли использовать ЦП или GPU. Если задано значение "auto", CNTK выберет лучшее доступное устройство. Задайте для использования -1 ЦП или значение >=0, чтобы использовать определенный GPU. Определяет modelPath место хранения промежуточных и окончательных обученных моделей. В этом примере используется ModelDir переменная, определенная в начале файла конфигурации.

Три основных блока конфигурации для обучения определяют саму сеть и параметры для алгоритма обучения и средства чтения данных.

  • Построитель сети — здесь вы определяете топологию и сведения о сети, такие как размер и количество слоев и тип узлов. Простой построитель сетевых подключений можно использовать для стандартных моделей или построителя сети BrainScript для пользовательских моделей. Дополнительные сведения см. на соответствующих страницах.
  • ПАРАМЕТРИЗАЦИЯ алгоритма обучения (стохастический градиентный спуск). Настраиваемые параметры включают импульс, адаптивную скорость обучения, адаптивный размер мини-бэтч, параллельное обучение. Дополнительные сведения см. в блоке JSON .
  • Средство чтения — блок чтения определяет, какое средство чтения следует использовать и где находятся соответствующие входные файлы. CNTK предоставляет несколько средств чтения данных для различных форматов и задач (см. блок чтения).

Наконец, строка command = MNISTtrain указывает, какие из определенных задач необходимо выполнить. Для последовательного выполнения нескольких задач, например для обучения и оценки, просто добавьте дополнительные задачи в команду, разделенную двоеточием: command = "MNISTtrain:MNISTtest"

Оценка обученной модели

Чтобы оценить точность обученной модели, используйте eval команду или test команду (дополнительные сведения см. в разделе "Обучение", "Тестирование", "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 блока, а на верхнем уровне (см. часть обучения выше) и используется как действиями train , так и test действиями. В блоке 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.

Следующие шаги