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


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 слоя.