次の方法で共有


Python でモデルを評価操作方法

保存された畳み込みネットワークを評価する

イメージでトレーニングされたモデルでは、いくつかの点を考慮する必要があります。 この時点で変換はモデルの一部ではないため、平均を減算するには手動で行う必要があります。 もう 1 つの問題は、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)

上記の理由は、古いモデルでは、実際のモデル パラメーターに加えてトレーニング情報が保存されるためです。

トレーニング済みのモデルを使用して特定のレイヤーから特徴を抽出しますか?

ここに例があります