Обзор использования 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.
Следующие шаги