Прочитать на английском

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


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