Utvärdera modellindata

När du har bundit värden till en modells indata och utdata är du redo att utvärdera modellens indata och få dess förutsägelser.

Om du vill köra modellen anropar du någon av metoderna Evaluate* på din LearningModelSession. Du kan använda LearningModelEvaluationResult för att titta på utdatafunktionerna.

Exempel

I följande exempel kör vi en utvärdering av sessionen och skickar in bindningen och ett unikt korrelations-ID. Sedan parsar vi utdata som en lista över sannolikheter, matchar den med en lista med etiketter för de olika saker som vår modell kan känna igen och skriver resultatet till konsolen:

// 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}");
    }
}

Borttagning av enhet

Om enheten blir otillgänglig, eller om du vill använda en annan enhet, måste du stänga sessionen och skapa en ny session.

I vissa fall kan grafikenheter behöva tas bort och läsas in igen, enligt beskrivningen i DirectX-dokumentationen.

När du använder Windows ML måste du identifiera det här fallet och stänga sessionen. Om du vill återställa från en enhetsborttagning eller ny initiering skapar du en ny session som utlöser logiken för enhetsval som ska köras igen.

Det vanligaste fallet där du ser det här felet är under LearningModelSession.Evaluate. Om enheten tas bort eller återställs blir LearningModelEvaluationResult.ErrorStatusDXGI_ERROR_DEVICE_REMOVED eller DXGI_ERROR_DEVICE_RESET.

Se även

Anmärkning

Använd följande resurser för hjälp med Windows ML:

  • Om du vill ställa eller besvara tekniska frågor om Windows ML använder du taggen windows-machine-learningStack Overflow.
  • Om du vill rapportera en bugg, skicka in en felrapport på vår GitHub-sida .