如何?在 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)
上述原因在於,在舊模型中,除了實際模型參數之外,還會儲存定型資訊。
使用定型模型從特定層擷取特徵?
此處有一個範例。