CNTK оценить скрытые слои
На этой странице описывается, как предоставить значения скрытого слоя обученной модели.
Обзор
Модель CNTK основана на взаимосвязанных слоях. Некоторые из этих слоев можно оценить с помощью EvalDll
того, что они помечены как "выходные" слои. Чтобы предоставить другие слои через EvalDll
эти слои, эти слои должны быть помечены как выходные слои путем добавления их в outputNodes
свойство.
Например, 01_OneHidden_ndl_deprecated.cntk
файл конфигурации ссылается на 01_OneHidden.ndl
файл для определения сети. В этом файле описания сети мы определили два уровня:
h1 = DNNSigmoidLayer (featDim, hiddenDim, featScaled, 1)
ol = DNNLayer (hiddenDim, labelDim, h1, 1)
Но только один слой помечается как выходные данные:
outputNodes = (ol)
Таким образом, при вычислении возвращаются только значения, EvalDll
относящиеся к уровню ol
.
Чтобы оценить скрытый h1
слой, необходимо сначала предоставить его в качестве выходного узла. Существует три возможных способа:
1. Модель обучения со скрытыми слоями, предоставляемыми
Чтобы вывести h1
слой, просто добавьте его в качестве выходных данных в описании сети (01_OneHidden.bs
файле) при его обучении, и этот слой будет доступен для чтения во время оценки:
outputNodes = (h1:ol)
Однако это означает, что модель должна быть обучена (повторно) с помощью этой конфигурации.
2. Изменение уже обученной модели
Модели можно изменять на лету при загрузке с помощью выражений BrainScript. Это будет задокументировано в будущем обновлении этой документации.
3. Изменение набора выходных узлов уже обученной модели при загрузке для оценки с помощью EvalDll
/EvalDllWrapper
модулей
Если обученный будет оцениваться с помощью EvalDll
/EvalDllWrapper
модулей, можно добавить outputNodeNames
свойство с двоеточием разделенного списка узлов в определение сети:
outputNodeNames = "h1.z:ol.z"
При загрузке сети подсистема Eval распознает outputNodeNames
свойство и заменит выходные узлы модели списком узлов, указанных в свойстве outputNodeNames
.
При просмотре кода в CPPEvalClient
примере проекта отображается строка (раскомментированная), указывающая outputNodeNames
свойство:
networkConfiguration += "outputNodeNames=\"h1.z:ol.z\"\n";
networkConfiguration += "modelPath=\"" + modelFilePath + "\"";
model->CreateNetwork(networkConfiguration);
При выполнении программы отображаются соответствующие выходные данные для h1.z
слоя.