다음을 통해 공유


숨겨진 레이어 평가 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 표시됩니다.