다음을 통해 공유


Python에서 모델 평가 어떻게 할까요?

저장된 나선형 네트워크 평가

이미지에 대해 학습된 모델에서 고려해야 할 몇 가지 사항이 있습니다. 이 시점에서 변환은 모델의 일부가 아니므로 평균을 빼려면 수동으로 수행해야 합니다. 또 다른 문제는 PIL이 학습 중에 사용된 것과 다른 순서로 이미지를 로드하고 변환이 필요하다는 것입니다.

다음을 가정합니다.

  • 학습 중에 모든 채널에서 128을 뺍니다.
  • 예측하려는 이미지가 "foo.jpg"입니다.
  • 을 사용하여 Python에 모델을 저장했습니다. z.save("mycnn.dnn")

그런 다음 다음을 수행할 수 있습니다.

from cntk.ops.functions import load_model
from PIL import Image 
import numpy as np

z = load_model("mycnn.dnn")
rgb_image = np.asarray(Image.open("foo.jpg"), dtype=np.float32) - 128
bgr_image = rgb_image[..., [2, 1, 0]]
pic = np.ascontiguousarray(np.rollaxis(bgr_image, 2))

predictions = np.squeeze(z.eval({z.arguments[0]:[pic]}))
top_class = np.argmax(predictions)

NDL 또는 BrainScript에서 학습한 이전 모델을 로드하는 경우 다음과 같이 모델 출력 노드를 찾아야 합니다.

for index in range(len(z.outputs)):
   print("Index {} for output: {}.".format(index, z.outputs[index].name))

...
Index 0 for output: CE_output.
Index 1 for output: Err_output.
Index 2 for output: OutputNodes.z_output.
...

인덱스 2가 있는 'z_output'에만 관심이 있습니다. 따라서 실제 모델 출력을 얻으려면 다음을 수행합니다.

import cntk

z_out = cntk.combine([z.outputs[2].owner])
predictions = np.squeeze(z_out.eval({z_out.arguments[0]:[pic]}))
top_class = np.argmax(predictions)

위의 이유는 이전 모델에서 실제 모델 매개 변수 외에 학습 정보가 저장되어 있기 때문입니다.

학습된 모델을 사용하여 특정 계층에서 기능을 추출하시겠습니까?

여기에 예제가 있습니다.