モデルの入力を評価する
モデルの入力と出力に値をバインドすると、モデルの入力を評価し、その予測を取得する準備が整います。
モデルを実行するには、LearningModelSession でいずれかの Evaluate* メソッドを呼び出します。 LearningModelEvaluationResult を使用して、出力機能を調べることができます。
例
次の例では、セッションで評価を実行し、バインドと一意の関連付け ID を渡します。 次に、出力を確率の一覧として解析し、それをモデルが認識可能なさまざまなものに関するラベルの一覧と照合して、結果をコンソールに書き込みます。
// How many times an evaluation has been run
private int runCount = 0;
private void EvaluateModel(
LearningModelSession session,
LearningModelBinding binding,
string outputName,
List<string> labels)
{
// Process the frame with the model
var results =
await session.EvaluateAsync(binding, $"Run {++runCount}");
// Retrieve the results of evaluation
var resultTensor = results.Outputs[outputName] as TensorFloat;
var resultVector = resultTensor.GetAsVectorView();
// Find the top 3 probabilities
List<(int index, float probability)> indexedResults = new List<(int, float)>();
for (int i = 0; i < resultVector.Count; i++)
{
indexedResults.Add((index: i, probability: resultVector.ElementAt(i)));
}
// Sort the results in order of highest probability
indexedResults.Sort((a, b) =>
{
if (a.probability < b.probability)
{
return 1;
}
else if (a.probability > b.probability)
{
return -1;
}
else
{
return 0;
}
});
// Display the results
for (int i = 0; i < 3; i++)
{
Debug.WriteLine(
$"\"{labels[indexedResults[i].index]}\" with confidence of {indexedResults[i].probability}");
}
}
デバイスの削除
デバイスが使用できなくなった場合や、別のデバイスを使用したい場合は、セッションを閉じて新しいセッションを作成する必要があります。
場合によっては、DirectX のドキュメントで説明されているように、グラフィックス デバイスのアンロードと再読み込みが必要になることがあります。
Windows ML を使用している場合は、このケースを検出してセッションを閉じる必要があります。 デバイスの削除または再初期化から回復するには、新しいセッションを作成します。これにより、デバイス選択ロジックがトリガーされて再度実行されます。
このエラーは一般的に、LearningModelSession.Evaluate の実行中の場合に最も表示されます。 デバイスの削除またはリセットが発生した場合、LearningModelEvaluationResult.ErrorStatus は DXGI_ERROR_DEVICE_REMOVED または DXGI_ERROR_DEVICE_RESET になります。
関連項目
- 前: モデルをバインドする
Note
Windows ML に関するヘルプについては、次のリソースを参照してください。
- Windows ML に関する技術的な質問をしたり、質問に回答したりするには、Stack Overflow の windows-machine-learning タグを使用してください。
- バグを報告するには、GitHub で問題を提出してください。