共用方式為


如何?在 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)

上述原因在於,在舊模型中,除了實際模型參數之外,還會儲存定型資訊。

使用定型模型從特定層擷取特徵?

此處有一個範例。