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